判斷點在多邊形內部

2021-05-25 09:38:30 字數 1132 閱讀 4765

用的是射線法,我的**取的是向右的射線

這題沒有點在邊上的情況,但是還是要考慮很多

比如射線覆蓋邊,射線交短點的情況,為了區分各種狀況 我分成了6中相交情況~

唉~有點多了 ~不過比較清晰~不知道別人是怎麼做的

#include struct edge

;struct point

;//儲存邊

edge e[105];

point p[105];

int n,m; //n邊數也是點數,m待測點數

void reade()

bool less(const double &a,const double &b)

bool greater(const double &a,const double &b)

// 0 不相交 1交叉 2 交1上 3 交2上 4交1下 5交2下 6覆蓋

int hor_cross_seg(point o,edge e)

//上if (less(o.x,e.ax)&&equ(o.y,e.ay)&& greater(o.y,e.by) )

if(less(o.x,e.bx)&&equ(o.y,e.by)&& greater(o.y,e.ay))

return 3;

//下if (less(o.x,e.ax)&&equ(o.y,e.ay)&& less(o.y,e.by))

if (less(o.x,e.bx) && equ(o.y,e.by)&& less(o.y,e.ay))

//交叉

if (equ(e.by,e.ay)&& !equ(o.y,e.ay))

if (greater(e.ay,o.y) && greater(e.by,o.y) ||(less(e.ay,o.y) && less(e.by,o.y)))

double x=(o.y-e.ay)/(e.by-e.ay)*(e.bx-e.ax)+e.ax;

if (x>o.x)

return 0;

}bool testpoint(point t)

{ int i,num=0;

int laststatus,curst;

laststatus=hor_cross_seg(t,e[n-1]);

for (i=0;i

判斷點在多邊形內部

微博 文中所指的多邊形均為凸多邊形,一些描述可能有誤,歡迎指正。在開始之前,我們需要先構建好測試環境。我構建了乙個比較特殊的多邊形,如下。從最上面的頂點順時針座標 螢幕座標系 分別為 40,10 60,30 60,50 20,50 20,30 根據對多邊形的了解,我們可以得出如下結論 如果乙個點在多...

判斷點在多邊形內部

文中所指的多邊形均為凸多邊形,一些描述可能有誤,歡迎指正。在開始之前,我們需要先構建好測試環境。我構建了乙個比較特殊的多邊形,如下。從最上面的頂點順時針座標 螢幕座標系 分別為 40,10 60,30 60,50 20,50 20,30 根據對多邊形的了解,我們可以得出如下結論 如果乙個點在多邊形內...

判斷點在多邊形內演算法

點和多邊形關係的演算法實現 好了,現在我們已經了解了向量叉積的意義,以及判斷直線段是否有交點的演算法,現在回過頭看看文章開始部分的討論的問題 如何判斷乙個點是否在多邊形內部?根據射線法的描述,其核心是求解從p點發出的射線與多邊形的邊是否有交點。注意,這裡說的是射線,而我們前面討論的都是線段,好像不適...