Picproje Elektronik Sitesi

SERBEST BÖLGE => Programlama ve Algoritma => Konuyu başlatan: z - 26 Eylül 2011, 01:02:44

Başlık: Programcının bilmecileri
Gönderen: z - 26 Eylül 2011, 01:02:44
Ekrana silindirik bir obje yerleştirip, daha sonra bu objenin yüzeyine yazı yazabilirmisiniz?
Başlık: Ynt: Programcının bilmecileri
Gönderen: z - 26 Eylül 2011, 02:04:01
Bu bilmeceyi bir kadame basitleştirelim.

Yazıyı dairesel şekilde eğen basit bir program yazınız. (Metal paralardaki yazı misali)
Başlık: Ynt: Programcının bilmecileri
Gönderen: Burak B - 26 Eylül 2011, 10:22:36
:) Vektörel mi raster mi olucak ?
Başlık: Ynt: Programcının bilmecileri
Gönderen: z - 26 Eylül 2011, 12:18:08
Hazır tool kullanmayın da nasıl olursa olsun.
Başlık: Ynt: Programcının bilmecileri
Gönderen: iyildirim - 26 Eylül 2011, 12:32:55
Hazır tool'a GDI, direct3d, openGL gibi şeylerde giriyormu?. 

En azından başlangıçta standart windows lib'lerini ucundan da olsa kullanmadan font'u vektör-raster olarak elde etmek uğraştırıcı. Özelliklede trutype olanları. Bezier curve hesapları vs. gerekir.

Win lib'lerini kullanabiliyorsak da zaten hazırı var gibi.
Başlık: Ynt: Programcının bilmecileri
Gönderen: Burak B - 26 Eylül 2011, 13:01:18
Hayırdır @bunalmis hocam nerde lazım oldu bu ?
Başlık: Ynt: Programcının bilmecileri
Gönderen: evreno - 26 Eylül 2011, 13:25:09
bunalmış hocam linkde istediğin kodlar var sanırım
http://www.vbdotnetheaven.com/UploadFile/moosestafa/859/ (http://www.vbdotnetheaven.com/UploadFile/moosestafa/859/)
Başlık: Ynt: Programcının bilmecileri
Gönderen: z - 26 Eylül 2011, 13:27:04
Bana lazım olmadı. Sadece bilmece.

Fakat bana lazım olan bir şey var. Rasterden vectore geçiş sağlayacak açık kaynak ve optimize sonuçlar üreten kod varsa süper olur.
Başlık: Ynt: Programcının bilmecileri
Gönderen: iyildirim - 26 Eylül 2011, 13:35:04
Alıntı yapılan: bunalmis - 26 Eylül 2011, 13:27:04
Rasterden vectore geçiş sağlayacak açık kaynak ve optimize sonuçlar üreten kod varsa süper olur.

Hocam biraz daha açarmısınız.  Girdi nedir, yada elimizde ne var ve ne elde etmek istiyoruz.? Raster veri nereden geliyor. ?
Başlık: Ynt: Programcının bilmecileri
Gönderen: Burak B - 26 Eylül 2011, 13:42:22
Bu işinizi görür mü? Eskiden sıkça kullandığım bir VCL'dir.

AggPas (http://www.crossgl.com/aggpas/aggpas-demo.htm)
Başlık: Ynt: Programcının bilmecileri
Gönderen: z - 26 Eylül 2011, 13:52:02
Alıntı yapılan: iyildirim - 26 Eylül 2011, 13:35:04
Hocam biraz daha açarmısınız.  Girdi nedir, yada elimizde ne var ve ne elde etmek istiyoruz.? Raster veri nereden geliyor. ?

Mesela 1 bit kodlamalı siyah beyaz Bmp bir resim var.  Pixel bilgilerinden vectore geçiş yaptığınız takdirde cnc de çok hızlı işleyebiliyorsunuz.
Kendi yazdığım kodlar sadece yatay ve dikeyde yakaladığı pixelleri vectöre çeviriyor, haliyle bu, optimize dönüşümden çok uzak.

Eğer uğraşmak isterseniz bilmecelerden birisi de bu olsun.

Paintle 400x400 ebatlarında alan oluştur ve line butonuna tıklayıp ekrana gelişi güzel doğrular çizin.
Daha sonra bu bmp dosyasını yazacağınız programa girin, programınız her bir doğruyu tespit etsin ve bunlara ait vektörleri üretsin.

(Bmp çiziminizdeki çizgiler birbiriyle de gelişgüzel kesişsin ki program işe yarasın.)



Başlık: Ynt: Programcının bilmecileri
Gönderen: iyildirim - 26 Eylül 2011, 15:19:54
Alıntı yapılan: bunalmis - 26 Eylül 2011, 13:52:02
Paintle 400x400 ebatlarında alan oluştur ve line butonuna tıklayıp ekrana gelişi güzel doğrular çizin.
Daha sonra bu bmp dosyasını yazacağınız programa girin, programınız her bir doğruyu tespit etsin ve bunlara ait vektörleri üretsin.
(Bmp çiziminizdeki çizgiler birbiriyle de gelişgüzel kesişsin ki program işe yarasın.)

Tam olarak bu olmasada buna benzer şekilde, çizgiler değil kesişen kapalı poligonların sınırlarını bulacak şekilde bir şey yapmıştım. Sadece siyah beyaz  bir resim değil, pcb kazıma amaçlı olduğu için modifiye edilerek ucun geçeceği yerlere göre oluşturulan renkli bir resim ile çalışmıştım.

Resim üzerinde renk geçişlerini yakalayıp bu renk geçişlerini takip ederek bir yere kadar oluyor. Sonuçta piksel piksel çalışıldığı için ancak 4 ana yön ve bu yönlerin tam aralarını (45 derece) bulacak şekilde bir şey yazabildim. Sonuçta 8 ana yönde vektör oluşturabilen bir şey oldu.
Ancak çeşitli sıkıntıları var. Resim 8bit lik renkli olduğu için büyükçe bir PCB için bir piksel = 1 step hesabı ile  çok fazla bellek istiyor. Sadece 8 ana yön ile çalışılabiliyor. G02-03 komutları üretemiyor. vs.

Zamanında bende bayağı bir, açık kaynak kodlu örnek projeler aramıştım. Pek bir şey bulamamıştım. Olanlarda bir yere kadar gelip yarım kalmış şeylerdi.

Düşündüğümde, direkt resim üzerinden, daha doğrusu sadece  siyah beyaz resim üzerinden çalışmak ise çok daha zor.  Eğer resim uç kalınlığına göre modifiye edilmemiş ise vektörleri tekrardan işlemek gerekir. Bunu yapabiliyorsanız direkt olarak gerber dosyaları ile çalışmak daha rahat olmaz mı hocam?

Sizin de PCB kazıma üzerine çalışmalarınız olduğunun bildiğimden merak ettiğim, uc kalınlığına göre resmi nasıl farklılaştırabildiğiniz.


İlk bilmece de için eğer GDI lib gibi birşey kullanabiliyorsak, fontları döndürmek için için hazır fonksiyonlar var.  Bir çember üzerinde fontların koordinatlarını belirtmek yeterli.
Eğer kullanamıyorsak da bir şekilde fontları oluşturan vertislerin elde olduğunu düşünmek gerekir. Veya ikinci bilmeceyi çözüp resim üzerinden vertisleri elde ederiz. Sonrasında herhangi bir noktaya göre döndürmek için bu vertisleri oluşturan noktaları  yeniden hesaplamak için basit trigonometri bile yeterli olur.
Başlık: Ynt: Programcının bilmecileri
Gönderen: SpeedyX - 26 Eylül 2011, 16:52:18
[IMG]http://img687.imageshack.us/img687/1069/10357869.png[/img]
bwtraceboundary kullanarak ufak bir uğraşıyla şöyle bişey çıktı ama üzerinde çalışmak lazım, bir ara tekrar devam ederim.

Aslında resimde sadece düz çizgiler varsa birbirine bağlı komşu aktif pixelleri takip ederek ilk ve son noktalar bulunup çalıştığınız ortamda (matlab, delphi vs..) vektörel olarak o noktalar arasında line çizilebilir (pixelasyon çizgilerin üzerine vektörel çizgiler). Sonra bu çizilmiş objeler (çizgiler) zaten vektörel oldukları için tek tek işlenebilirler.

Bu arada canny metoduyla kenar algılama yapınca şöyle birşey çıkıyor, aynı sizin kazıma pcb görüntüsü gibi.
[IMG]http://img696.imageshack.us/img696/3574/vect.png[/img]
Başlık: Ynt: Programcının bilmecileri
Gönderen: z - 26 Eylül 2011, 17:08:08
Aslında çözümü de var gibi fakat uğraşmaya korkuyorum. Sorunu şöyle tarif edeyim.

Örneğin, 30 derelik eğimle bir doğru çiz ve bitiminde 60 derecelik ikinci bir doğru çiz. (Çizgiler uç uca bağlı)

Komşuluktan yola çıkınca bu iki çizgi tek bir çizgi gibi algılanıyor, çünkü her pixelin en az bir komuşusu var.





Başlık: Ynt: Programcının bilmecileri
Gönderen: z - 26 Eylül 2011, 17:53:53
Alıntı YapSizin de PCB kazıma üzerine çalışmalarınız olduğunun bildiğimden merak ettiğim, uc kalınlığına göre resmi nasıl farklılaştırabildiğiniz.

Bu durumlar için bir ara bir program yazmıştım. Vectörden BMP ye geçip ardından yolların tam arasından geçen kesimleri buluyordu. Ancak kesim yollarını gerisin geriye vektöre çevirirken daha önceki mesajımda bahsettiğim optimum çözüm olmayan sonuç ortaya çıkıyordu. Üstelik bu işlem, BMP nin çok büyük XY değerlerinden dolayı çok zaman alıyordu. (A5 ebatındaki bir pcb için bile saatler mertebesinde)

Daha sonraları bu yöntemi tamamen terkedip, asıl pcb çiziminde kesim yollarını farklı bir layera elle kendim çizerek ve bu layera ait gerber kodlarını çıkarttırarak çözüm ürettim.

PCB rogramlarının  cnc için çıktı veren özel bir bileşeni yoksa (Eagle ULP gibi) bu tip  durumlar için hala bilgisayarlı bir çözümüm yok.


Başlık: Ynt: Programcının bilmecileri
Gönderen: KaraBekir - 26 Eylül 2011, 18:40:43
Alıntı yapılan: bunalmis - 26 Eylül 2011, 17:08:08
Aslında çözümü de var gibi fakat uğraşmaya korkuyorum. Sorunu şöyle tarif edeyim.

Örneğin, 30 derelik eğimle bir doğru çiz ve bitiminde 60 derecelik ikinci bir doğru çiz. (Çizgiler uç uca bağlı)

Komşuluktan yola çıkınca bu iki çizgi tek bir çizgi gibi algılanıyor, çünkü her pixelin en az bir komuşusu var.
Görüntüdeki iki doğru Hough Dönüşümü ile bulunabilir.
Başlık: Ynt: Programcının bilmecileri
Gönderen: iyildirim - 26 Eylül 2011, 19:34:03
Bunalmış hocam,

Anladığım kadarı ile  yolların tam ortalarını hesaplatarak sadece izolasyon yapıyorsunuz. Ben tam olarak göründüğü gibi PCB'yi elde etmek için birşeyler yaptım. Sadece izolasyon ve işleme zamanını azaltmak amaçlı birşeyler yapmaya çalıştım ama yarım kaldı.

Gerberden resim üretebiliyorsanız, gerberi resim olarak çizerken ucun geçeceği noktaları hesaplamak daha kolay.

Benim yönteminde, olayın temeli gerberi çizerken aperture size'lar ile oynamaktan ibaret.

Eğer birden fazla pass geçiyorsanız, kazıma ucunun bakıra en uzak geçeceği durumdan başlayıp, ucun bakıra olan mesafesini aperture size'a ekleyip, çizimi yapıyoruz. En sonda da bakıra en yakın vektör ve en sonunda orjinal aperture size ile çizilmiş gerber..  Unutmadan her bir pass farklı renkte çiziliyor. 
Geriye kalan ikinci bilmecede ki gibi, şu iki rengin birleştiği noktaları izlemek.. Tabii bu yöntemde tam olarak bakır boşaltılmazsa yollar arasında başıboş adalar kalıyor. Ayrıca her bir bakır yolun kenarları izlendiği için CNC deki işlem süresi de uzun oluyor.

Başlık: Ynt: Programcının bilmecileri
Gönderen: Gökhan BEKEN - 27 Eylül 2011, 06:08:21
Sizce renkli bir fotoğrafın pixellerini inceleyen bir program nesneleri ayırtedebilir mi?
Biraz uçuk sayılabilir ama terminator filminde robotların gözünden bakıldığında kırmızı bir ekranda nesneleri ayırt ediyor, mesela o anki görüntüde bir telefon var o telefonun etrafını çizgi ile belirterek bu bir telefon diye anlıyor. Bu şekilde nesneleri tek tek ayırtediyor. Bunun için yapay zekanın yanında birde kuvvetli bir veri tabanı gerekiyor sanırım.