判斷乙個點是否在矩形內部(Python類定義)

2021-10-01 06:14:22 字數 2206 閱讀 4130

有乙個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時,若返回值為正,表示點在輪廓內部,返...