用的是射線法,我的**取的是向右的射線
這題沒有點在邊上的情況,但是還是要考慮很多
比如射線覆蓋邊,射線交短點的情況,為了區分各種狀況 我分成了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點發出的射線與多邊形的邊是否有交點。注意,這裡說的是射線,而我們前面討論的都是線段,好像不適...