Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

Bayram AKGÜL & Hakan KUTUCU

Benzer bir sunumlar


... konulu sunumlar: "Bayram AKGÜL & Hakan KUTUCU"— Sunum transkripti:

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 Asimptotik Çalışma Zamanı En kötü durum Brute Force O(n3) Divide & Conquer O(n lg n) QuickHull O(n2) Graham Scan O(n lg n)  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 14.139 N/A Divide & Conquer 16 1.842 18.318 QuickHull ≈0 3 31 360 3.519 Graham Scan 47 484 5.699 64.184 Monotone Chain 6 63 807 9.998 Gift Wrapping 424 4.219 46.502 Incremental Convex Hull 516 6.012 78.595 Sistem Özellikleri İşletim Sistemi Windows 8.1 x64 Programlama ortamı Microsoft Visual Studio 2013 Programlama Dili C# (5.0) İş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


"Bayram AKGÜL & Hakan KUTUCU" indir ppt

Benzer bir sunumlar


Google Reklamları