SORU
20 EKİM 2008, PAZARTESİ


Poligon içinde nokta aka isabet sınaması

En zarif, en iyi 2D "içinde" veya Çokgen.nokta çokgen nedir içerir(p:Puan) algoritma?

Edit: vs tamsayılar yüzer için farklı cevaplar olabilir. Öncelikli amacı hız.

CEVAP
27 Mayıs 2010, PERŞEMBE


Aşağıdaki kod parçası en iyi çözüm (here alınan) bence

int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy)
{
  int i, j, c = 0;
  for (i = 0, j = nvert-1; i < nvert; j = i  ) {
    if ( ((verty[i]>testy) != (verty[j]>testy)) &&
     (testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i])   vertx[i]) )
       c = !c;
  }
  return c;
}

Argümanlar

  • nvert: Çokgen köşe sayısı. Olsun sonunda ilk köşe tekrarlama makale, yukarıda bahsedilen anlatılmıştır.
  • vertx, verty: Diziler x - ve y-koordinatları poligon " denir. içeren
  • testx, asabi: X - ve y-koordinat test noktası.

Hem kısa hem de etkili ve dışbükey ve içbükey çokgenler için çalışır. Daha önce de belirtildiği gibi sınırlayıcı dikdörtgenin ilk kontrol ve çokgen delik ayrı ayrı tedavi edilmelidir.

Bunun arkasındaki fikir oldukça basittir. Yazar aşağıdaki gibi açıklar

Yarı-sonsuz bir ray yatay olarak çalıştırın (x, y sabit artan) test noktadan ve kaç geçer Kont. Her kavşakta, ray arasında iç ve dış geçer. Bu Jordan eğri teoremi denir.

Değişken c 0, 0, 1 ve 1 yatay ray herhangi bir kenar Haçlar her zaman geçiriliyor. Yani temelde kenarları geçti sayısı çift veya tek olup olmadığını takip etmek. 0 ve 1 demek bile garip gelir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrey Menshikov

    Andrey Mensh

    28 Ocak 2012
  • laptopmag

    laptopmag

    25 Ocak 2008
  • RobertDuskin

    RobertDuskin

    12 HAZİRAN 2008