遇到了乙個問題,如何判斷乙個點是否在乙個多邊形內部。
主要有以下幾種方法:
(1)面積和判別法:判斷目標點與多邊形的每條邊組成的三角形面積和是否等於該多邊形,相等則在多邊形內部。
(2)夾角和判別法:判斷目標點與所有邊的夾角和是否為360度,為360度則在多邊形內部。
(3)引射線法:從目標點出發引一條射線,看這條射線和多邊形所有邊的交點數目。如果有奇數個交點,則說明在內部,如果有偶數個交點,則說明在外部。
簡潔的c++**如下:
int pnpoly(int nvert, float *vertx, float *verty, float testx, floattesty)
return
c;}
matlab驗證**:
clc;close;
%%poly points 設定的多邊形頂點
% poly_point_x = [1 1 10 14 7];
% poly_point_y = [0 12 13 2 4];
poly_point_x = [0 0 9];
poly_point_y = [1 12 1];
%%actual points 待測試頂點
test_x = 6;
test_y =0;
c=0;
m=0;
%% return test point in poly or
not判斷測試點是否在多邊形內
hold on;
plot(poly_point_x,poly_point_y,'*
')plot(test_x,test_y,'.
')n = 4;%n=頂點數+1
for i = 1: n-1
if i == 1j = n - 1;
else
j = i - 1;
endy = ((poly_point_y(:,i) > test_y) ~= (poly_point_y(:,j) >test_y));
x = ((poly_point_x(:,j) - poly_point_x(:,i))*(test_y - poly_point_y(:,i))/(poly_point_y(:,j) - poly_point_y(:,i)) + poly_point_x(:,i))>test_x;
if y&&x
c = ~c;
endendc
當返回0時,代表點不在多邊形中。當返回1時,代表點在多邊形中。
pnpoly 判斷點是否在多邊形內部 c
遇到了乙個問題,如何判斷乙個點是否在乙個多邊形內部。主要有以下幾種方法 1 面積和判別法 判斷目標點與多邊形的每條邊組成的三角形面積和是否等於該多邊形,相等則在多邊形內部。2 夾角和判別法 判斷目標點與所有邊的夾角和是否為360度,為360度則在多邊形內部。3 引射線法 從目標點出發引一條射線,看這...
判斷點是否在多邊形內
1.叉乘判別法 只適用於凸多邊形 想象乙個凸多邊形,其每乙個邊都將整個2d螢幕劃分成為左右兩邊,連線每一邊的第乙個端點和要測試的點得到乙個向量v,將兩個2維向量擴充套件成3維的,然後將該邊與v叉乘,判斷結果3維向量中z分量的符號是否發生變化,進而推導出點是否處於凸多邊形內外。這裡要注意的是,多邊形頂...
判斷點是否在多邊形中
一 基本知識 以該點為起點,做平行於x軸的,向x軸的正方向的射線,計算該射線與多邊形的邊相交的次數,如果是奇數則在多邊形的裡面,否則反之。然後需要考慮邊界問題 1 如果點在多邊形的邊上則認為是多邊形裡面,這條在實際應用中可忽略,因為在圖形上多邊形的邊是乙個畫素寬度的,很難點到那裡,2 射線和多邊形的...