Programcının bilmecileri

Başlatan bunalmis, 26 Eylül 2011, 01:02:44

z

Ekrana silindirik bir obje yerleştirip, daha sonra bu objenin yüzeyine yazı yazabilirmisiniz?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Bu bilmeceyi bir kadame basitleştirelim.

Yazıyı dairesel şekilde eğen basit bir program yazınız. (Metal paralardaki yazı misali)
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Burak B

:) Vektörel mi raster mi olucak ?
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

z

Hazır tool kullanmayın da nasıl olursa olsun.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

iyildirim

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.

Burak B

Hayırdır @bunalmis hocam nerde lazım oldu bu ?
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

evreno


z

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.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

iyildirim

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. ?

Burak B

Bu işinizi görür mü? Eskiden sıkça kullandığım bir VCL'dir.

AggPas
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

z

#10
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.)



Bana e^st de diyebilirsiniz.   www.cncdesigner.com

iyildirim

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.

SpeedyX

[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]

z

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.





Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

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.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com