有乙個point,其座標為(xp, yp);有乙個四邊形**(適用矩形或凸四邊形;凹四邊形不怎麼適用我的要求,沒測試)**,其四個角點的座標依次為(xa, ya, xb, yb, xc, yc, xd, yd)。注意此處的「依次」,可逆時針,也可順時針,一定要保證是依次;否則,增加排序函式。
定義乙個類——ispointinquadrangle,其函式cross_product用來求由3個點組成的兩個向量的叉積,函式compute_para用來獲取4個引數。
class
ispointinquadrangle
(object)
: def __int__
(self)
: self.__isinquadrangleflag = false
def cross_product
(self, xp, yp, x1, y1, x2, y2)
:return
(x2 - x1)
*(yp - y1)
-(y2 - y1)
*(xp - x1)
def compute_para
(self, xp, yp, xa, ya, xb, yb, xc, yc, xd, yd)
: cross_product_ab =
ispointinquadrangle()
.cross_product
(xp, yp, xa, ya, xb, yb)
cross_product_bc =
ispointinquadrangle()
.cross_product
(xp, yp, xb, yb, xc, yc)
cross_product_cd =
ispointinquadrangle()
.cross_product
(xp, yp, xc, yc, xd, yd)
cross_product_da =
ispointinquadrangle()
.cross_product
(xp, yp, xd, yd, xa, ya)
return cross_product_ab,cross_product_bc,cross_product_cd,cross_product_da
def is_in_rect
(self, aa, bb, cc, dd):if
(aa >
0 and bb >
0 and cc >
0 and dd >0)
or(aa <
0 and bb <
0 and cc <
0 and dd <0)
:print
("this point is in the quadrangle."
) self.__isinquadrangleflag= true
else
:print
("this point is not in the quadrangle."
) self.__isinquadrangleflag = false
return self.__isinquadrangleflag
if __name__ ==
'__main__'
: aa, bb, cc, dd =
ispointinquadrangle()
.compute_para
(600
,550
,508
,451
,730
,470
,718
,615
,495
,596
)print
(ispointinquadrangle()
.is_in_rect
(aa, bb, cc, dd)
)
輸出結果:
this point is in the quadrangle.
true
本程式的四邊形角點座標需要按照逆時針或者順時針排列。本程式未考慮角點座標排序問題,請讀者自行補充。
參考:1.已知四邊形的四個點,求乙個點是否在四邊形之內的解決方法
2.如何判斷乙個點在矩形內
判斷乙個點是否在多邊形內部
判斷乙個點是否在多邊形內部 三角形的有向面積 我們先判斷乙個點是否在乙個三角形內部。乙個三角形在乙個座標系 譬如由a b c三點組成 中,我們可以通過計算它的有向面積來判斷a b c三點在座標系中的順逆。當然,在此之前我們必須先訂立一套計算面積的規則。比如,在笛卡爾座標系中,我們利用 s a.x b...
判斷一點是否在輪廓內部
參考 如下左圖,適用於所有多邊形,增加乙個通過測量點的橫線 或任意直線 此直線與多邊形邊緣的交點,當測量點左右的交點都為奇數時,點在多邊形以內。反之則不在。但是如果測量點處於多邊形邊緣或頂點或下右3圖的情況下時,結果將不準確,不過我們可以根據不同的情況作特殊處理來保證結果的正確性。關於這個演算法的具...
判斷乙個點是否在RotatedRect中
opencv函式pointpolygontest c double pointpolygontest inputarray contour,point2f pt,bool measuredist 用於判斷乙個點是否在輪廓中 當measuredist設定為true時,若返回值為正,表示點在輪廓內部,返...