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

  • booba1234

    booba1234

    22 Temmuz 2006
  • Greater Than Gatsby Photoshop Actions & Lightroom Presets

    Greater Than

    11 ŞUBAT 2013
  • ThePointblank

    ThePointblan

    18 Aralık 2006