Bir tarama çizgisi algoritması kullanmayı deneyebilirsiniz - Çokgenin her satırı için (yani y = dak (y) .. maks (y)), l = min (x) ve r = max (x) olsun. Sol/sağ eğimi (deltax) hesaplayın ve daha önce çizgiyle eğim ile karşılaştırın. Eğer değiştiyse (burada biraz tolerans kullanın), dikdörtgenin bir köşesindesiniz (ya da yakınına). Eğim, düşük çözünürlük nedeniyle tam olarak olamayacağından, ancak büyük dikdörtgenler ve eğimler için çok benzer olmadığından, bu durum işe yaramaz.
En azından, bu örneğin iyi çalışır: Zaten köşelerinde iki tane yüzden
X0000000000X l = 0, r = 11
.00000000000 l = 1, r = 11, deltaxl = 1, deltaxr = 0
..X000000000 l = 2, r = 11, deltaxl = 1, deltaxr = 0
.....0000000 l = 5, r = 11, deltaxl = 3, deltaxr = 0
........0000 l = 8, r = 11, deltaxl = 3, deltaxr = 0
...........X l = 11, r = 11, deltaxl = 3, deltaxr = 0
Sen, l ve r için iki farklı değerler elde dikdörtgenin üst başlar. Sol tarafta, ilk üç satır için deltax = 1 olacaksınız, ancak ondan sonra deltax = 3 olacak, yani bir köşe var (3, 3). Sağ tarafta hiçbir şey değişmez, deltax = 0, böylece sadece son noktayı alırsınız.
Burada köşeleri "topladığınızı" unutmayın, bu nedenle sonda 4 köşeniz yoksa, yamaçlar çok benzer (veya bir üçgenin resminiz var) ve farklı bir alana geçebilirsiniz. (daha kesin) algoritma veya sadece bir hata verin. Dikdörtgende 4 köşeden daha fazla veya deliğe benzer başka garip şeyler varsa. Bir çeşit görüntü tespitinin söz konusu olduğu görülüyor, bu yüzden bu durumlar ortaya çıkabilir, değil mi? bazen 1'dir,
xxxxxx
xxxxx deltax = 1 dy/dx = 1/1 = 1
xxxxx deltax = 0 dy/dx = 2/1 = 2
xxxx deltax = 1 dy/dx = 3/2 = 1.5
xxxx deltax = 0 dy/dx = 4/2 = 2
xxx deltax = 1 dy/dx = 5/3 = 1.66
Bazen DELTAX 0'dır: - (lastx x) iyi çalışmaz, bir dikdörtgenin sol tarafı için bu örneğe bakın
basit DELTAX = ettiği durumlar vardır Çizginin eğimini asıl noktadan sol/sağ noktaya (deltay/deltax) kullanmak daha iyidir. Bunu kullanarak, hala bir toleransla uğraşmak zorunda kalacaksınız, ancak değerleriniz her yeni satırda daha kesin olacaktır.
Niçin çalışıyorsunuz? Gerçek maksimumu ve gerçek minayı bulmanız gerekecek (hangisinin gerçekten maksimum ve min olduğunu belirlemeye karar vermeden önce sahip olduğunuz tüm noktaları inceleyerek) ama bir noktada size söylenecek bazı verilere güvenmek zorunda kalacaksınız. dikdörtgen _should_ gibi görünüyor. –
Köşeler için nokta koordinatları olmadan dikdörtgenin silüetini nasıl elde ettiniz? – Stewbob
Giriş olarak bir resimim var, eşik fonksiyonuyla ilginç kısmı arka plandan ayırabilirim. – dutchflyboy