Ekrana silindirik bir obje yerleştirip, daha sonra bu objenin yüzeyine yazı yazabilirmisiniz?
Bu bilmeceyi bir kadame basitleştirelim.
Yazıyı dairesel şekilde eğen basit bir program yazınız. (Metal paralardaki yazı misali)
:) Vektörel mi raster mi olucak ?
Hazır tool kullanmayın da nasıl olursa olsun.
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.
Hayırdır @bunalmis hocam nerde lazım oldu bu ?
bunalmış hocam linkde istediğin kodlar var sanırım
http://www.vbdotnetheaven.com/UploadFile/moosestafa/859/ (http://www.vbdotnetheaven.com/UploadFile/moosestafa/859/)
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.
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. ?
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)
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.)
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.
[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]
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.
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.
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.
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.
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.