Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
1
Bayram AKGÜL & Hakan KUTUCU
Convex Hull Problemi Bartın Üniversitesi Bilgisayar Programcılığı Bölümü Bayram AKGÜL & Hakan KUTUCU Karabük Üniversitesi Bilgisayar Mühendisliği Bölümü
2
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
İçerik Convex Hull Problemi Nedir? Nerelerde Kullanılabilir? Ccw yöntemi Convex Hull Özellikleri Çözüm Yöntemleri Brute Force Divide & Conquer Quick Hull Graham Scan Gift Wrapping Monotone Chain Incremental Convex Hull Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
3
Convex Hull Problemi Nedir?
S noktalar kümesi olsun: S = {p1, p2, p3, … ,pn} Bu noktalar kümesinin tüm elemanlarını içine alan düzlemde en küçük alanlı çokgeni, uzayda en küçük hacimli çok yüzlü cismi oluşturacak noktalar kümesini bulma problemidir. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
4
Nerelerde Kullanılabilir
Bilgisayar Grafikleri Görüntü İşleme Bilgisayar Oyunlarında Çarpışma Analizi CAD/CAM uygulamaları Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
5
Convex Hull Özellikleri-1
Noktalar kümesindeki her hangi iki nokta seçilsin. Eğer kalan tüm noktalar seçilen noktaların oluşturduğu doğru parçasının aynı yönünde kalırsa bu iki nokta çokgenin gövdesinde yer alacaktır. Bir noktanın bir doğru parçasının hangi yönünde kaldığı nasıl bilinebilir? Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
6
Ccw (counter clock wise)
Bir noktanın başka iki noktaya göre durumunu gösterir. Örneğin a noktasından b noktasına gittikten sonra c noktasına gitmek için hangi yöne dönmeliyiz. Bu metot ile bir noktanın bir doğrunun hangi tarafında kaldığı anlaşılabilir. Determinant sonucu >0 𝑆𝑎ğ𝑎 𝐷ö𝑛üş <0 𝑆𝑜𝑙𝑎 𝐷ö𝑛üş =0 𝐷𝑜ğ𝑟𝑢𝑠𝑎𝑙 𝑐𝑐𝑤(𝑎,𝑏,𝑐)= 𝑎 𝑥 𝑎 𝑦 1 𝑏 𝑥 𝑏 𝑦 1 𝑐 𝑥 𝐶 𝑦 1 Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
7
Convex Hull Özellikleri-2
Noktalar kümesindeki her hangi üç noktanın oluşturduğu üçgenin içinde kalan noktalar kesinlikle elenebilir. Üçgeni oluşturan noktalar da daha sonra başka üçgenler tarafından elenebilir. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
8
Convex Hull Özellikleri-3
Noktalar kümesindeki uç noktalar (en küçük ve en büyük x ve y noktaları) birleştirilince içinde kalan noktalar kesinlikle elenebilir. Uç noktalar kesinlikle çokgenin gövdesinde yeralacaktır. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
9
Convex Hull Özellikleri-4
Eğer noktalar x koordinatına göre (eşitse y koordinatına göre) küçükten büyüğe sıralanırsa her eklenen nokta çokgene eklenecektir. Burada hangi nokta veya noktaların çıkarılacağı bilinmelidir. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
10
Convex Hull Özellikleri-5
Convex Hull noktalarında ilerlerken sonraki nokta her zaman önceki iki noktanın aynı tarafında yer alır. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
11
Convex Hull Özellikleri-6
Uç nokta olarak en küçük y koordinatlı nokta kesinlikle çokgenin gövdesinde yer alır. Bir sonraki nokta tarama açısı en küçük olan nokta olacaktır. Bu şekilde devam ederek noktaların çevresi sarılabilir. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
12
İncelenecek Çözüm Yöntemleri
Brute Force Divide & Conquer QuickHull Graham Scan Gift Wrapping Monotone Chain Incremental Convex Hull Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
13
Brute Force – Tüm İhtimalleri Deneme
Noktalar kümesindeki tüm nokta ikilileri için kalan noktaların aynı yönde kalıp kalmadığını test etme yöntemidir. Nokta sayısı N olsun. 2 elemanlı alt küme sayısı 𝐶(𝑛,2) = 𝑛 2 −𝑛 2 Her alt küme için tüm noktaları test etmenin maliyeti 𝑛 2 −𝑛 2 ∗𝑛=𝑂( 𝑛 3 ) Toplam A𝐥𝐥𝐠𝐨𝐫𝐢𝐭𝐦𝐚 𝐤𝐚𝐫𝐦𝐚ş𝚤𝐤𝐥𝚤ğ𝚤 𝑶( 𝒏 𝟑 ) Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
14
Brute Force – Tüm İhtimalleri Deneme
BruteForce(S, n) // S noktalar kümesi, n nokta sayısı CH ← Ø // boş liste for i ←1 to n for j ← 1 to n if i ≠ j for k ← 1 to n if j ≠ k Ʌ i ≠ k ccw(Si,Sj,Sk) < 0 break // veya > 0 if k = n // eğer döngü normal bitti ise CH.Add(Si,Sj) break Toplam Karmaşıklık 𝑶( 𝒏 𝟑 ) Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
15
Divide & Conquer – Böl ve Fethet
Problemi iki alt probleme bölüp alt problemleri çözme prensibine dayanmaktadır. Küçük bir kümede convex hull çözmek büyük bir kümede çözmekten çok daha hızlı olacaktır. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
16
Divide & Conquer – Böl ve Fethet
Noktaları x koordinatlarına göre sırala Kümeyi nokta sayısı ≤ 3 olana kadar recursive olarak ikiye böl Alt kümeler için çokgenleri oluştur Alt çokgenleri birleştir. Çokgenler nasıl birleştirilebilir? Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
17
Divide & Conquer – Böl ve Fethet
Noktaları x koordinatlarına göre sırala Kümeyi nokta sayısı ≤ 3 olana kadar recursive olarak ikiye böl Alt kümeler için çokgenleri oluştur Alt çokgenleri birleştir. Çokgenler nasıl birleştirilebilir? Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
18
Divide & Conquer – Böl ve Fethet
Noktaları x koordinatlarına göre sırala Kümeyi nokta sayısı ≤ 3 olana kadar özyinelemeli olarak ikiye böl Alt kümeler için çokgenleri oluştur Alt çokgenleri birleştir. Çokgenler nasıl birleştirilebilir? Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
19
Divide & Conquer – Böl ve Fethet
Noktaları x koordinatlarına göre sırala Kümeyi nokta sayısı ≤ 3 olana kadar özyinelemeli olarak ikiye böl Alt kümeler için çokgenleri oluştur Alt çokgenleri birleştir. Çokgenler nasıl birleştirilebilir? Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
20
Divide & Conquer – Böl ve Fethet
Noktaları x koordinatlarına göre sırala Kümeyi nokta sayısı ≤ 3 olana kadar özyinelemeli olarak ikiye böl Alt kümeler için çokgenleri oluştur Alt çokgenleri birleştir. Çokgenler nasıl birleştirilebilir? Alt teğet ve üst teğet bulma Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
21
Divide & Conquer – Alt Teğet bulma
A kümesinde en sağdaki nokta a olsun. B kümesinde en sağdaki nokta b olsun. 𝑎𝑏 A ve B kümesinin alt teğeti olmadığı sürece tekrarla 𝑎𝑏 A kümesinin alt teğeti olmadığı sürece a’yı saat yönünde ilerlet ( a = a-1) 𝑎𝑏 B kümesinin alt teğeti olmadığı sürece b’yi saat yönünün tersinde ilerlet ( b = b+1) Benzer şekilde üst teğeti bul AltTeğetBul(HA,HB) a←EnBüyükX (HA) b←EnKüçükX (HB) pi ∈ HA Ʌ qj ∈ HB while ccw(a,b,pi) > 0 Ʌ ccw(a,b,qj) > 0 do while(a,b,pi) > 0 a←a–1 (saat yönünde dön) while(a,b,qj) > 0 b←b+1 (saat yönü tersi dön) return (a,b) Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
22
Divide & Conquer – Analiz
T(n) = 2 T(n/2) + ϴ(n) ϴ(n) birleştirme zamanını ifade eder ve eğer en fazla O(n) zamanda birleştirebilirse toplam karmaşıklık O( n lg n) olur. Noktaları x koordinatlarına göre sırala - O(n lg n) Alt çokgenleri birleştirme - O(m) m = |HA|+|HB| ≤ |A|+|B|= n m ≤ n Çalışma Zamanı: O(n lg n) Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
23
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
QuickHull Aslında quick-sort gibi divide&conquer prensibine göre çalışır. Teorik olarak ortalama çalışma zamanı ϴ(n lg n)’dir. Eğer tüm noktalar çokgenin gövdesinde yer alacak şekilde dağılmışsa çalışma zamanı O(n2) olur. 2 ile 8 boyut arasında verimli bir şekilde çalışır. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
24
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
QuickHull En büyük ve en küçük x koordinatlarını bul ve listeye ekle. Bunlar kümeyi ikiye bölmek için kullanılacak a ve b noktaları olsun. Liste={a,b} a,b noktaları arasına bir çizgi çiz ve çizginin sağı ve solu olmak üzere noktaları iki ayrı kümeye ayır. 𝑎𝑏 doğrusunun sol tarafında doğruya en uzak p noktasını bul ve listede a ve b noktaları arasına ekle. Liste={a,p,b} Bulunan nokta ile oluşacak üçgenin içinde kalan noktalar convex hull parçası olamazlar, bir sonraki adım için ele. Önceki iki adımı yeni oluşan iki doğru( 𝑎𝑝 ve 𝑝𝑏 ) için tekrarla. Sol tarafta nokta kalmayınca 3. adımdan 𝑎𝑏 doğrusunun sağ tarafı için çözmeye başla. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
25
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
QuickHull En büyük ve en küçük x koordinatlarını bul ve listeye ekle. Bunlar kümeyi ikiye bölmek için kullanılacak a ve b noktaları olsun. Liste={a,b} a,b noktaları arasına bir çizgi çiz ve çizginin sağı ve solu olmak üzere noktaları iki ayrı kümeye ayır. 𝑎𝑏 doğrusunun sol tarafında doğruya en uzak p noktasını bul ve listede a ve b noktaları arasına ekle. Liste={a,p,b} Bulunan nokta ile oluşacak üçgenin içinde kalan noktalar convex hull parçası olamazlar, bir sonraki adım için ele. Önceki iki adımı yeni oluşan iki doğru( 𝑎𝑝 ve 𝑝𝑏 ) için tekrarla. Sol tarafta nokta kalmayınca 3. adımdan 𝑎𝑏 doğrusunun sağ tarafı için çözmeye başla. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
26
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
QuickHull En büyük ve en küçük x koordinatlarını bul ve listeye ekle. Bunlar kümeyi ikiye bölmek için kullanılacak a ve b noktaları olsun. Liste={a,b} a,b noktaları arasına bir çizgi çiz ve çizginin sağı ve solu olmak üzere noktaları iki ayrı kümeye ayır. 𝑎𝑏 doğrusunun sol tarafında doğruya en uzak p noktasını bul ve listede a ve b noktaları arasına ekle. Liste={a,p,b} Bulunan nokta ile oluşacak üçgenin içinde kalan noktalar convex hull parçası olamazlar, bir sonraki adım için ele. Önceki iki adımı yeni oluşan iki doğru( 𝑎𝑝 ve 𝑝𝑏 ) için tekrarla. Sol tarafta nokta kalmayınca 3. adımdan 𝑎𝑏 doğrusunun sağ tarafı için çözmeye başla. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
27
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
QuickHull En büyük ve en küçük x koordinatlarını bul ve listeye ekle. Bunlar kümeyi ikiye bölmek için kullanılacak a ve b noktaları olsun. Liste={a,b} a,b noktaları arasına bir çizgi çiz ve çizginin sağı ve solu olmak üzere noktaları iki ayrı kümeye ayır. 𝑎𝑏 doğrusunun sol tarafında doğruya en uzak p noktasını bul ve listede a ve b noktaları arasına ekle. Liste={a,p,b} Bulunan nokta ile oluşacak üçgenin içinde kalan noktalar convex hull parçası olamazlar, bir sonraki adım için ele. Önceki iki adımı yeni oluşan iki doğru( 𝑎𝑝 ve 𝑝𝑏 ) için tekrarla. Sol tarafta nokta kalmayınca 3. adımdan 𝑎𝑏 doğrusunun sağ tarafı için çözmeye başla. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
28
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
QuickHull En büyük ve en küçük x koordinatlarını bul ve listeye ekle. Bunlar kümeyi ikiye bölmek için kullanılacak a ve b noktaları olsun. Liste={a,b} a,b noktaları arasına bir çizgi çiz ve çizginin sağı ve solu olmak üzere noktaları iki ayrı kümeye ayır. 𝑎𝑏 doğrusunun sol tarafında doğruya en uzak p noktasını bul ve listede a ve b noktaları arasına ekle. Liste={a,p,b} Bulunan nokta ile oluşacak üçgenin içinde kalan noktalar convex hull parçası olamazlar, bir sonraki adım için ele. Önceki iki adımı yeni oluşan iki doğru( 𝑎𝑝 ve 𝑝𝑏 ) için tekrarla. Sol tarafta nokta kalmayınca 3. adımdan 𝑎𝑏 doğrusunun sağ tarafı için çözmeye başla. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
29
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
QuickHull En büyük ve en küçük x koordinatlarını bul ve listeye ekle. Bunlar kümeyi ikiye bölmek için kullanılacak a ve b noktaları olsun. Liste={a,b} a,b noktaları arasına bir çizgi çiz ve çizginin sağı ve solu olmak üzere noktaları iki ayrı kümeye ayır. 𝑎𝑏 doğrusunun sol tarafında doğruya en uzak p noktasını bul ve listede a ve b noktaları arasına ekle. Liste={a,p,b} Bulunan nokta ile oluşacak üçgenin içinde kalan noktalar convex hull parçası olamazlar, bir sonraki adım için ele. Önceki iki adımı yeni oluşan iki doğru( 𝑎𝑝 ve 𝑝𝑏 ) için tekrarla. Sol tarafta nokta kalmayınca 3. adımdan 𝑎𝑏 doğrusunun sağ tarafı için çözmeye başla. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
30
QuickHull Algoritması
Input : S noktalar kümesi Output: CH convex hull noktaları listesi QuickHull(S) a ← EnKüçükX (S) b ← EnBüyükX (S) CH.Add(a,b) for i ←1 to |S| if ccw(a,b,S[i]) < 0 LS.Add(S[i]) else RS.Add(S[i]) NoktaEkle (CH, a,b, LS) NoktaEkle(CH, b, a, RS) return CH NoktaEkle(hull, a, b, 𝑺 ) // 𝑆 alt küme Index ←IndexOf(b) p ←EnUzakNokta( 𝑎𝑏 , 𝑆 ) hull.Insert(Index,p) for i ←1 to | 𝑆 | if ccw(a,p, 𝑆 [i]) < 0 then LAP.Add( 𝑆 [i]) // 𝑎𝑝 ’nin sol tarafı if ccw(p,b, 𝑆 [i]) < 0 then LPB.Add( 𝑆 [i]) // 𝑝𝑏 ’nin sol tarafı NoktaEkle(a,p,LAP) NoktaEkle(p,b,LPB) Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
31
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
Graham Scan Yöntem ismini Ronald Graham’ın 1972 yılında yayınladığı makalesinden almaktadır Bir sonraki nokta her zaman iki önceki noktanın aynı yönünde olması prensibine dayanmaktadır. Burada ilk iki noktanın öncelikli olarak bulunması gerekmektedir. Bu yöntem ile çözüme başlamak için öncelikle en küçük y koordinatı olan nokta bulunur. Bu noktaya göre diğer tüm noktalar polar açılarına göre sıraya konulur. Bir noktaya göre başka bir noktanın polar açısı 𝑡𝑎𝑛 −1 𝑦 2 − 𝑦 1 𝑥 2 − 𝑥 1 şeklinde bulunabilir. Eklenecek her nokta için sıraya konulmuş sonraki noktaya bakılır. Eğer yön değiştirme varsa yönün değiştiği nokta çıkarılır, sonraki noktaya bakılır Bu yöntem için bağlı-liste veya stack veri yapısı kullanılabilmektedir. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
32
Graham Scan – Liste Kullanımı
Y koordinatı en küçük noktayı bul - p0 Bu noktaya göre diğer noktaları polar açılarına göre sırala Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
33
Graham Scan – Liste Kullanımı
Y koordinatı en küçük noktayı bul - p0 Bu noktaya göre diğer noktaları polar açılarına göre sırala Tüm noktaları sırasına göre listeye ekle Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
34
Graham Scan – Liste Kullanımı
Y koordinatı en küçük noktayı bul - p0 Bu noktaya göre diğer noktaları polar açılarına göre sırala Tüm noktaları sırasına göre listeye ekle Saat yönünün tersinde taramaya başla, her hangi bir yerde yön değiştirme varsa o noktayı çıkar Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
35
Graham Scan – Liste Kullanımı
Y koordinatı en küçük noktayı bul - p0 Bu noktaya göre diğer noktaları polar açılarına göre sırala Tüm noktaları sırasına göre listeye ekle Saat yönünün tersinde taramaya başla, her hangi bir yerde yön değiştirme varsa o noktayı çıkar Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
36
Graham Scan – Liste Kullanımı
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
37
Graham Scan – Stack Kullanımı
Y koordinatı en küçük noktayı bul - p0 Bu noktaya göre diğer noktaları polar açılarına göre sırala Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
38
Graham Scan – Stack Kullanımı
Y koordinatı en küçük noktayı bul - p0 Bu noktaya göre diğer noktaları polar açılarına göre sırala Saat yönünün tersine ilerle, eğer yön değişmezse stack’e ekle Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
39
Graham Scan – Stack Kullanımı
Y koordinatı en küçük noktayı bul - p0 Bu noktaya göre diğer noktaları polar açılarına göre sırala Saat yönünün tersine ilerle, eğer yön değişmezse stack’e ekle Yön değiştirme varsa son eklenen noktayı çıkar Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
40
Graham Scan – Stack Kullanımı
Y koordinatı en küçük noktayı bul - p0 Bu noktaya göre diğer noktaları polar açılarına göre sırala Saat yönünün tersine ilerle, eğer yön değişmezse stack’e ekle Yön değiştirme varsa son eklenen noktayı çıkar Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
41
Graham Scan – Stack Kullanımı
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
42
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
Stack kullanımı Graham Scan Input : S noktalar kümesi Output: CH convex hull noktaları için stack GrahamScan (S) CH← Ø // boş stack p0←EnKüçükY(S) PolarSort(p0, S) CH.Push(p0), CH.Push(S[1]), CH.Push(S[2]) for i←3 to |S| Top←CH.Top(), Next←CH.Pop() while cww(Top,Next,S[i])≤0 Top←CH.Top() if |CH| ≤ 1 break Next←CH.Pop() CH.Push(Top) CH.Push(S[i]) return CH Liste Kullanımı Input : S noktalar kümesi Output: CH convex hull noktaları listesi GrahamScan (S) CH← Ø // boş liste p0 ← EnKüçükY(S) CH ← PolarSort(p0, S) for i ←2 to |CH|-1 while cww(CH[i-1],CH[i],CH[i+1]) ≤0 CH.RemoveAt(i) i←i-1 if i≤1 break return CH Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
43
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
Graham Scan - Analiz En Küçük y koordinatlı noktayı bulma – O(n) Sıralama O(n lg n) Çokgen oluşturma Liste için uymayanı çıkarma O(n) Stack için sonraki noktayı ekleme O(n) Çalışma Zamanı: O( n lg n) Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
44
Gift Wrapping (Jarvis March) Yöntemi
1973 yılında R.A. Jarvis tarafından geliştirilmiştir. Bu yöntemin ismi iki boyutlu durumlar için Jarvis March olarak ta anılmaktadır. Bir sonraki nokta iki önceki noktanın oluşturduğu doğruya göre en az tarama açısına sahip nokta olmalıdır. Bu prensibe göre çözüm yapılmaktadır. Graham Scan metoduna göre avantajı başlangıçta noktaları sıralamaya gerek yoktur. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
45
Gift Wrapping (Jarvis March) Yöntemi
Yönteme başlarken en alt nokta bulunur ve listeye eklenir Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
46
Gift Wrapping (Jarvis March) Yöntemi
Yönteme başlarken en alt nokta bulunur ve listeye eklenir Bu noktaya göre diğer tüm noktalara tarama açısı bulunur. En az tarama açısı sonraki nokta olacaktır. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
47
Gift Wrapping (Jarvis March) Yöntemi
Yönteme başlarken en alt nokta bulunur ve listeye eklenir Bu noktaya göre diğer tüm noktalara tarama açısı bulunur. En az tarama açısı sonraki nokta olacaktır. Bu kez son iki noktaya göre en küçük tarama açısı bulunur, sonraki nokta bu nokta olacaktır. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
48
Gift Wrapping (Jarvis March) Yöntemi
Yönteme başlarken en alt nokta bulunur ve listeye eklenir Bu noktaya göre diğer tüm noktalara tarama açısı bulunur. En az tarama açısı sonraki nokta olacaktır. Bu kez son iki noktaya göre en küçük tarama açısı bulunur, sonraki nokta bu nokta olacaktır. Bu işlem başlanılan yere geri dönene kadar devam eder. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
49
Gift Wrapping (Jarvis March) Yöntemi
Yönteme başlarken en alt nokta bulunur ve listeye eklenir Bu noktaya göre diğer tüm noktalara tarama açısı bulunur. En az tarama açısı sonraki nokta olacaktır. Bu kez son iki noktaya göre en küçük tarama açısı bulunur ve sonraki nokta bu nokta olacaktır. Bu işlem başlanılan yere geri dönene kadar devam eder. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
50
Gift Wrapping (Jarvis March) Yöntemi
Yönteme başlarken en alt nokta bulunur ve listeye eklenir Bu noktaya göre diğer tüm noktalara tarama açısı bulunur. En az tarama açısı sonraki nokta olacaktır. Bu kez son iki noktaya göre en küçük tarama açısı bulunur ve sonraki nokta bu nokta olacaktır. Bu işlem başlanılan yere geri dönene kadar devam eder. Başlanılan yere geri geldiyse son eklenen noktayı çıkar ve işlemi bitir. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
51
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
Gift Wrapping - Analiz Input : S noktalar kümesi Output: CH convex hull noktaları listesi GiftWrapping (S) CH← Ø // boş liste Pminy←EnKüçükY(S) CH.Add (Pminy) lastAngle←0 Pcurrent = Pminy repeat minRotAngle←10000 // büyük bir sayı for i←1 to |S| angle ← AngleOf(Pcurrent ,S[i]) rotAngle ← (2𝜋 – (lastAngle –angle)) if rotAngle < minRotAngle minRotAngle ←rotAngle minAngle ← angle Pnext ← S[i] lastAngle ← minAngle CH.Add(pNext) Pcurrent ← Pnext until Pcurrent ≠ Pminy return CH En küçük y koordinatlı noktayı bulma - O(n) Her nokta için tarama açısı bulma O(n) Bulunan her kenar noktası için tarama açısı bulma O(hn) olur. h çokgende kenar noktası sayısı olacaktır ve herzaman ≤ n dir. Eğer h n’ye göre çok küçük olsa çok etkili bir algoritma olacaktır. Maksimum çalışma zamanı O(n2) olur. Ortalama çalışma zamanı O(nh) d boyutlu olursa 𝑂(𝑛 𝑑 2 ) Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
52
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
Monotone Chain 1979 yılında A.M. Andrew tarafından Graham Scan algoritmasına alternatif olarak sunulmuştur Andrew’e göre eğer bir sıralama yapılacaksa daha karmaşık açısal sıralama yapmak yerine daha basit olan koordinatlara göre sıralama yapmak daha az maliyetli olacaktır. Bu yöntem ile en soldan en sağa alttan ve üstten iki gövde oluşturularak convex hull oluşturulur. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
53
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
Monotone Chain Noktalar x koordinatlarına göre (eğer eşitse y koordinatlarına göre) sıraya dizilir. Önce ilk iki nokta(halka) listeye(zincire) eklenir. Tüm noktalar(halkalar) sırasıyla listeye (zincire) eklenecektir Listeye eklemeden önce daha önce listeye eklenmiş olan son iki noktaya bakılır. Eğer bu iki noktaya göre eklenecek nokta sol tarafa düşüyorsa son eklenmiş nokta çıkarılır ve bu şarta bir daha bakılır, bu şart sağlanmadığı sürece listenin son elemanı çıkarılır. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
54
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
Monotone Chain Noktaları x koordina göre sırala Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
55
Monotone Chain – Alt gövde oluşturma
Noktaları x koordina göre sırala İlk iki noktayı listeye ekle ve sola dönüş varsa sonraki noktayı ekle Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
56
Monotone Chain – Alt gövde oluşturma
Noktaları x koordina göre sırala İlk iki noktayı listeye ekle ve sola dönüş varsa sonraki noktayı ekle Sağa dönüş varsa son noktayı çıkar, sonra ekle Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
57
Monotone Chain – Alt gövde oluşturma
Noktaları x koordina göre sırala İlk iki noktayı listeye ekle ve sola dönüş varsa sonraki noktayı ekle Sağa dönüş varsa son noktayı çıkar, sonra ekle Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
58
Monotone Chain – Alt gövde oluşturma
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
59
Monotone Chain- Analiz
MonotoneChain (S) CH← Ø // boş liste Sort(S) // alt zincir for i←1 to |S| if |CH| ≥ 2 while cww(CH[Last-1],CH[Last],S[i])≤0 CH.RemoveLast() if |CH| < 2 break CH.Add(S[i]) // üst zincir t ←|CH| for i← |S|-2 down to 1 if |CH| ≥ t return CH Monotone Chain- Analiz Sıralama O(n log n) Alt gövde oluşturma O(n) Toplam Maliyet O(n log n) Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
60
Incremental Convex Hull Yöntemi
Noktaları X koordinatlarına göre (eşit ise y koordinatlarına göre) sıraya koyup sırayla çokgenin gövdesine dahil etme prensibine dayanır. Noktalar sıralı olduğuna göre eklenecek her nokta muhakkak çokgenin gövdesine girecektir. Eklenen her nokta çokgenin gövdesinden bazı noktaları çıkarabilir. Bir sonraki adım için çıkacak noktaları bulup çokgeni güncellemek gerekecektir. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
61
Incremental Convex Hull Yöntemi
Divide & Conquer Yönteminde birleştirmeyi hatırlayalım. İki çokgeni birleştirme prensibine göre yeni eklenen nokta sanki bir çokgenmiş gibi iki çokgen birleştirilir. Divide & Conquer metodundaki birleştirme adımını aynısı İki çokgen için alt teğet ve üst teğet bulunup birleştirilir. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
62
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
63
Incremental Convex Hull Yöntemi- Analiz
Sıralama O (n lg n) Birleştime O(n) Çalışma Zamanı: O(n lg n) Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
64
Karşılaştırma - Asimptotik
Algoritma Zaman Karmaşıklığı En iyi durum En kötü durum Brute Force O(n3) Divide & Conquer O(nlgn) QuickHull O(n2) Graham Scan Monotone Chain Gift Wrapping O(nh) Incremental Convex Hull Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
65
Karşılaştırma – CPU Çalışma Zamanları (ms)
ALGORİTMA NOKTA SAYISI 103 104 105 106 107 Brute Force 156 14139 N/A Divide & Conquer 16 1842 18318 QuickHull ≈0 3 31 360 3519 Graham Scan 47 484 5699 64184 Monotone Chain 6 63 807 9998 Gift Wrapping 424 4219 46502 Incremental Convex Hull 516 6012 78595 Sistem Özellikleri İşletim Sistemi Windows 8.1 x64 Programlama ortamı Microsoft Visual Studio 2013 Programlama Dili C# (5.0) – (.NET Framework 4.5) İşlemci Intel Core2 Quad Q GHz Sistem Belleği 4 GB (DDR3) Süreler ms cinsindendir. Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
66
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
Sonuç ve Öneriler Bu makalede convex hull problemi tanıtılarak bu problemi çözen algoritmalar incelenmiş, algoritmalarının çalışma zamanları asimptotik olarak incelenmiştir. Ayrıca algoritmaların daha da anlaşılır olması için çalışma adımları şekiller ile görselleştirilmiştir. Bu makale kapsamında convex hull problemini çözen algoritmaların animasyon programları hazırlanmıştır. Bu program algoritma analizi gibi derslerde bir algoritmanın işlem adımlarını görselleştirmek için yardımcı bir kaynak olarak kullanılabilir. Ayrıca bu program bir sonraki çalışmada üç boyutlu uzayda convex hull problemi için bir alt yapı olarak kullanılacaktır. Bir sonraki çalışma (CPU+GPU) paralelleştirerek d boyutlu convex hull çözme Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
67
Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
Kaynaklar B. Praveen, R. Wenger, R. Crawfis, Isosurface construction in any dimension using convex hulls, IEEE Transactions on Visualization and Computer Graphics 10 (2004) 130–141. Chennakesava R. Alavala, “CAD/CAM: Concepts and Applications”,PHI Learning, 2011. Liu, Rong, Hao Zhang and James Busby "Convex hull covering of polygonal scenes for accurate collision detection in games." In Proceedings of graphics interface Windsor, Ontario, Canada: Canadian Information Processing Society. B. Yuan, C.L. Tan, Convex hull based skew estimation, Pattern Recognition 40 (2007) 456–475 Zhang, X. and Tang Z., A Fast Convex Hull Algorithm for Binary Image, Informatica 34 (2010) , 2009 Robert Sedgewick and Kevin Wayne, Geometric Primitives, Algorithms, 4th Ed., J. O’Rourke. Computational Geometry in C (2nd ed.). Cambridge University Press, 1998. T. M. Chan. A minimalist’s implementation of the 3-d divide-and-conquer convex hull algorithm. Technical report, University of Waterloo, 2003. Franco P. Preparata, S.J. Hong. Convex Hulls of Finite Sets of Points in Two and Three Dimensions, Commun. ACM, vol. 20, no. 2, pp. 87–93, 1977. Graham, R.L. (1972). An Efficient Algorithm for Determining the Convex Hull of a Finite Planar Set. Information Processing Letters 1, Jarvis, R. A. (1973). "On the identification of the convex hull of a finite set of points in the plane". Information Processing Letters 2: 18–21. A.M. Andrew, "Another Efficient Algorithm for Convex Hulls in Two Dimensions", Info. Proc. Letters 9, (1979) Convex Hull Problemi Bayram AKGÜL & Hakan KUTUCU
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.