2012-09-08 125 views
3

我絕不是專業程序員,所以請不要期待這裏有複雜的方法或語言。不過,我會感謝您的建議和建議,以實現一個算法,在稍後階段,我可以以編程方式添加到我的項目...這是問題:不規則形狀內的點

想象一下任意點(點X)以下屬性:

  • 具有座標
  • 位於一個2D表面
  • 是靜止
  • 屬於單個區域(其中邊界座標也是已知的)在任何給定的時間。也就是說,它是其「父」元素的唯一「孩子」。再一次,如果它不坐在一個區域,它肯定坐在另一個區域內!

一個區域不是簡單的正方形,四邊形或圓形,而是一個不規則的形狀。我現在的問題是:我如何確定: (i)如果X點位於特定區域內而不是鄰近區域; (ii)該點屬於哪個特定區域(在一組區域A,B或C中)?見鏈接的圖像更好地看到問題:

PS:我仔細研讀處理Point in Polygon問題(特別是「光線投射算法」,聽起來很聰明!)的可能性,但它似乎沒有因爲(i)區域可能彼此相鄰; (ii)我需要確定一個點所屬的區域多於它位於其內部/外部的區域。

非常感謝您提前!

+1

如果區域的邊界可能有曲率,區域的「邊界座標」如何表示該區域的實際邊界?您是使用某種曲線參數化還是使用多邊形逼近區域? –

+0

光線投射算法的變體可能會起作用。如果你從你的觀點投射出一束光線,並觀察它發出的第一個邊緣,你就會知道你的觀點是在分享這一邊緣的(最多)兩個區域之一內。然後,您可以對兩個候選區域的每一個使用兩次光線投射算法。 –

+0

對不起,我的錯 - 我進一步編輯了我的問題:在2D中定義了形狀(面)段的座標,沒有曲率! –

回答

0

程序員會願意這樣做:

  1. 函數正在作爲參數應用的領域和角度的數組。

  2. 構成一個循環 - 檢查所有的區域,由光線投射algorythm每一個

    檢查,如果該點屬於那裏。

    如果沒有,繼續循環,

    如果是的話,完成函數返回當前區域的數量。

  3. 如果您不在區域中,則返回-1。

當然,你也可以提高algorythm,考慮到共同邊界,而不是重複角度的計數他們,但這樣的algorythms顯然你的possiblilities現在。而且即使是一個好的程序員也會從容易起步,但工作