Hesaplamalı geometri (computational geometry) alanında belli başlı algoritmalar ünlüdür ve bu algoritmalar sadece geometrik problemlerin çözümü için değil farklı gerçek hayat problemlerinin çözümü için de kullanılır. Bunların bazılarını sıralayalım:
Kavramların tanımlarını iki boyutlu uzayda yapacağız. Çoğu problem için noktaların bir düzlem üzerinde olduğunu düşünmek yani iki boyutta çalışmak yeterlidir. Noktaların üç boyutlu veya daha fazla boyutta ele alınacağı durumlar ve problem benzetimleri olabilir. Kavramların büyük kısmı nokta boyutundan bağımsız ele alınabilir. Ancak problem çözen algoritmalar ve implementasyonlar boyut değişince çoğu zaman değişir ve boyut arttıkça özel durumlar, uygulamada zorluklar artar diyebiliriz.
2 boyutlu uzayda koordinatları verilen n adet noktamız olsun. Dikdörtgenin en ve boy doğrultuları mutlak koordinat sistemi eksenlerine paralel olsun. Bu noktaları içine alan en küçük dikdörtgeni hesaplayın.
Arayan algoritmayı yazalım:
Çevreleyen dikdörtgenin sol alt köşesi ile sağ üst köşe noktalarını elde ederiz. Buradan dikdörtgenin eni, boyu ve merkez noktası gibi farklı özellikleri rahatça hesaplanabilir.
2 boyutlu uzayda koordinatları verilen n adet noktamız olsun. Dikdörtgen eksenlere paralel olmak zorunda olmasın. Bu noktaları içine alan en küçük dikdörtgen ya da dikdörtgenleri arayın.
Noktaları çevreleyen en küçük alana sahip dikdörtgen bulunmalıdır. En küçük dikdörtgenin mutlak X ekseni ile yaptığı açı ve minimum en boy değerleri problem çözümü için yeterlidir. En küçük alan birden fazla açı ile elde edilebilir.
2 boyutlu uzayda koordinatları verilen n adet noktamız olsun. Bu noktaları içine alan konveks – dış bükey zarf eğrisini (convex hull) bulun.
Noktaları saran bir hediye paketi gibi dış bükey zarfı oluşturur.
Noktaları açısal olarak sıralayıp tarayarak konveks zarfı oluşturur.
Noktaları x koordinatına göre sıralayıp üst ve alt zincirleri oluşturur.
Yukarıdaki yöntemlerin algoritmik zorluğu O(n log n) dir.
2 boyutlu uzayda koordinatları verilen n adet nokta için konkav zarf eğrileri arama.
Her nokta için en yakın k komşuyu kullanarak şekli oluşturma
Noktalar arasında belirli bir yarıçapa göre şekil oluşturma
Konveks geometriler bir çok hesaplamada büyük kolaylıklar getirmektedir. Örneğin bir nokta tanımlı bir alanın içindemi dışındamı sorgulamasında konveks poligon için zorluk derecesi genel çözüme göre çok daha düşüktür.
Bu problemlerde konveks elemanlarla daha verimli ve az sayıda işlem yapan yöntemler ile çözüm bulunabilir.
Bu problemlerde konkav kenarlara sahip bir poligon, birden fazla konveks poligonun toplamı olarak düşünülebilir. Böylelikle konveks geometriler ile sonuç veren verimli algoritmalar kullanılarak sonuca ulaşılabilir.
Ear clipping (kulak kesme) yöntemi konkav poligonları konveks poligonlara dönüştürmek için kullanılan bir algoritmadır.
Örnek: Konkav poligonun C1, C2, C3 konveks parçalara bölünmesi
Voronoi diyagramları 2 boyutlu nokta setinde mesafe problemi çözme yöntemidir. Setimizde n adet nokta olsun. Her s noktası için öyle bir S alanı arıyoruz ki bu alandaki noktaların s noktası ile uzaklığı set içinde bulunan diğer noktalara olan uzaklıklarından küçüktür. Her bir nokta için kendisine yakın noktaların kümesi olan alan bulunduğunda Voronoi diyagramı tamamlanır.
Fortune algoritması bu problem çözümü için en çok kullanılan algoritmalardan biridir. Zorluk derecesi O(n log n) dir.
Örnek: 2D uzayda noktalar ve Voronoi bölgeleri
Belli noktaların etki alanlarını modellemek ve analiz etmek için kullanılır. (Örneğin hastane, okul gibi noktalar)
Kaliteli üçgen bulutu hesaplamak için kullanılır.
Engellerden uzak rotaları belirlemek için kullanılır.
Hücre yapılarını modellemek için kullanılır. Dokulardaki hücre dağılımlarını modellemek gibi.
Ölçüm datası enterpolasyonu ile ara noktalardaki değerleri hesaplamak için Voronoi diyagramları kullanılır.
Network düğüm noktaları yerleştirirken en iyi konumları hesaplamak için kullanılır. (Kapsama alanlarını analiz etmek ve optimum konumları bulmada.)
Lexicographic dizme: Aynı tip veri tutan sırası önemli dizilerden oluşan n tane nesne ele alalım. Kelimeleri tutan nesneler bir örnek olabilir, bu durumda veri tipi karakter olur.
Örneğin:
Lexicographic dizim: K1 < K2 < K3
Sayılardan oluşan sıralı diziler için:
Sıralama: S1 < S2 < S3
Bu dizilimi Deleaunay üçgenlemesi tanımında kullanacağız.
3 boyutlu uzayda parametrik NURBS bir yüzeyimiz var ve bu yüzeyin sınırlarını belirleyen 3 boyutlu dış kesim eğrileri verilmiştir. Bir sonraki slaytta yer alan görsele bakınız. Yüzey kesildikten sonra üçgenlere bölünecek. Bu problemin çözümü için 3 boyutta çalışmak yerine 2 boyutlu parametre uzayında çalışmak daha kolay olur. NURBS matematiği 3D noktaları u,v parametreleri ile üretir. Bu parametrelerin değiştiği aralık 0 ile 1 arasında kalacak şekilde ölçekleme yaparak parametre uzayında sol alt köşesi 0,0 da en boyu ise 1x1 lik bir karenin içindeki u,v parametreleri ile çalışabiliriz.
Her u,v parametresi 3 boyutlu uzayda NURBS dönüşüm noktası ile eşleşir. Kesme veya sınır eğrileri de parametre uzayında u,v noktaları ile ifade edilir. NURBS yüzey parametreleri ve 2 boyutlu parametre eğrilerini noktaları olan bir çok u,v noktasını üçgen bulutuna çevirirsek bu üçgen bulutun içinde kullanabiliriz. Çünkü parametre uzayında her 2 boyutlu nokta eşlediği model uzayında 3 boyutlu tek bir nokta vardır.
Kesilmiş yüzey için 2 boyutlu parametre uzayı ve 3D model uzayı.
2D Kesme Eğrileri (trim curves)
Parametre Uzayı
Model Uzayı
Delaunay üçgenlemesi yapılmış 2 boyutlu NURBS parametre (u,v) noktaları
Sağ taraftaki resimde 2D parametre uzayında u,v ikileleri içeren bir çok nokta vardır. Şekil yüzeyin dış ve iç sınırlarını elde etmek için kullanılan noktalar ve ek olarak kesilmeyen alandaki yüzeyin ayrık u,v parametrelerini gösterir.
2 boyutlu n adet noktanın üçgen bulutuna dönüştürülme probleminde birçok çözüm elde edilebilir. Delaunay üçgenlemesi bu çözümler içinde hangisinin en iyi olduğunu tanımlar.
Bunu 4 adet nokta için ele alalım.
p1,p2,p3,p4 noktaları için iki farklı üçgenleme yapılabilir. Şekildeki T1 ve T2 üçgen bulutuna ait açıları en küçükten en büyüğe olacak şekilde diziye dönüştürelim. T1 için {a6,a4,a3,a2,a1,a5} dizisi T2 için {a9,a12,a7,a10,a8,a11} dizisi oluşsun. Bu dizilerden lexicographic olarak küçük olanı bize Delaunay üçgenlemesini verir. Burada T2 < T1 olduğu için T2 daha uygundur.
Dört noktadan iki üçgen oluşturabiliriz. Elde ettiğimiz üçgenlerin ortak kenarını değiştirmek mümkündür. Diğer olası üçgenleme ortak kenarı konveks zarfın öbür diyagonal olarak aldığımız zaman ortaya çıkar. Buna kenar değiştirme (edge swapping) işlemi denilir.
Delaunay kriteri şekilde gösterilmiştir.
Dört noktadan üçü ile bir daire oluşturunca diğer nokta bu daire içinde kalıyorsa bu yasa dışıdır.
Bu üçgenleme kabul edilemez.
Şekilde T1 yasa dışıdır. T2 ise tamamen kritere uymaktadır.
Delaunay n adet nokta için mutlaka bütün üçgenlerin yasal olduğu bir üçgen bulutunun var olduğunu matematiksel olarak ispat etmiştir.
Problemi yine 2 boyutta ele alacağız. Kutularımız bu durumda sadece dikdörtgen olacak. Farklı en ve boylara sahip kutularımız olsun. Yine dikdörtgen olan ve kutunun içine konulacak n adet parçamız olsun. Parçaları kutulara en sıkı yerleştirme, başka bir deyişle en az kutu ile paketleme işini tamamlamaya çalışan arama algoritması bin packing (kutu doldurma) olarak isimlendirilir.
Algoritmik zorluk derecesi kombinasyonel, (NP hard) olarak isimlendirilmiştir. İdeal tek bir çözümün olmadığı, varsa bile bunun bulunamayacağı zamanların olduğu bir problemdir. İmplementasyonda Greedy (Obur) algoritma yaklaşımı bu tip zor problemler için uygundur. Sezgisel (heuristic) kriterler ile o an için uygun seçilimler arka arkaya uygulanıldığı metodlara Greedy nitelemesi yapılır. Örneğin seyyar satıcı probleminde gidilecek yerlerin bütününü düşünerek bir sıralama yapmak yerine o an satıcının bulunduğu yere en yakın lokasyon seçilir ve bu arka arkaya uygulanarak bütün lokasyonlar ziyaret edilir. Bu obur metod ile elde edilen sonuç optimum olmayabilir ama çoğu zaman kabul edilebilir sonuçlar
Önemli uygulamalarından biri levhalardan (plakalardan) kesilecek değişik parçaların en az fire oluşturması için yapılan aramadır. Saç levhalardan lazer kesim ile parça elde ederken ya da MDF plaklardan dolap parçalarını routerlarda ebatlarken en az fire ve en kısa kesim yolu optimizasyonları yapılır. Bu uygulamaya genel olarak nesting (yuvalama) ismi de verilmiştir. Nesting algoritmalarında kutu doldurmadan farklı olarak parçalar ve/veya plakalar dikdörtgen dışındaki şekillere de sahip olabilir.
Aşağıda örnek bir kesim senaryosu ve kutu doldurma algoritmasının bulduğu çözüm gösterilmiştir. Verilen parçalar 3200x1250 ve 1500x1250 lik plakalara yerleştirilmiştir.
Verilen parça ve plakalar için bin packing (kutu doldurma algoritmasının) yaptığı yerleştirme.
Serbest polyline şekiller ya da tamamen serbest eğrilik içeren şekille için çalışan nesting – optimizasyon algoritmaları vardır. Çoğu uygulama kendine ait kısıtlamalar içerir. (constraints) Örneğin doğal taş içine parça yerleştirme yaparken testere ile kesim için gereken boşluklar düşünülmelidir.
Yukarıda verilen üçgen parçaların tanımlı plakalara optimum yerleşimi için verilen çözüm görülmeketedir.
2 veya 3 boyutlu uzayda verilen n adet noktadan geçen bir eğri bulma problemimiz olsun. Eğer hesaplayacağımız eğri tam olarak verilen noktalardan geçiyorsa buna eğri enterpolasyonu denilir. Eğer aramayı yaparken noktalara tam olarak uymuyor ve belirli toleranslar dahilinde bu noktalardan sapmaya izin veriyorsak buna eğri aproksimasonu denilir.
Yukarıda eğri enterpolasyonu sonucu görülmektedir. 3. dereceden B-spline eğri tam olarak verilen noktaların üzerinden geçmektedir.
Yukarıdaki şekilde ise eğri aproksimasyonu ile bulunan verilen nokttalara ortalamada uyan bir eğri görülmektedir. Yüzeyler içinde aynı kavramlar geçerlidir. Verilen ayrık nokta kümesinden yola çıkarak sürekli bir NURBS yüzey hesaplanabilir. Bunu yaparken enterpolasyon ya da aproksimasyon yaklaşımı tercih edilebilir.