在不規則四邊形的內部隨機乙個點

2021-10-01 07:30:53 字數 3263 閱讀 6733

此問題只針對【凸多邊形

這個問題很有趣,上面乙個問題是給定乙個點,判斷是否在四邊形內, 這個問題正好是返過來

思路1, 隨機乙個位置, 判斷是否在四邊形內。不是的話就重新隨機

答:這個方法好low

於是就有了思路2

思路2,取四個點的minx, maxx, 然後根據x, 求出這個x值在四條邊上的點的位置(有可能相交, 有可能不相交,不相交的話就不考慮進去)

如圖

這個時候再隨機a和b之間就得到了y值,和之前取出的x值就構成了乙個點。 完成。 上**

**是lua寫的

local pos1 = cc.p(

200,

200)

local pos2 = cc.p(

500,

200)

local pos3 = cc.p(

450,

500)

local pos4 = cc.p(

150,

500)

local minx = math.

min(pos1.x, pos2.x, pos3.x, pos4.x)

local maxx = math.

max(pos1.x, pos2.x, pos3.x, pos4.x)

local miny = math.

min(pos1.y, pos2.y, pos3.y, pos4.y)

local maxy = math.

max(pos1.y, pos2.y, pos3.y, pos4.y)

local function getcross

(p1, p2, p)

return

(p2.x - p1.x)

*(p.y - p1.y)

-(p.x - p1.x)

*(p2.y - p1.y)

;end

--// 計算 |p1 p2| x |p1 p|

-- function getcross

(p1: point, p2: point, p: point)

--//判斷點p是否在p1p2p3p4的四方形內

function ispointinmatrix

(p1, p2, p3, p4, p)

local ispointin =

getcross

(p1, p2, p)

*getcross

(p3, p4, p)

>=

0 and getcross

(p2, p3, p)

*getcross

(p4, p1, p)

>=0;

return ispointin;

endfunction randpoint(.

..)--確定下x值

local x = math.

random

(minx, maxx)

-- local x =

181-- 計算下四條線上, 當前x值的有效範圍

-- 線的公式是 f

(x)= x + n

local gety1 =

function

(p1, p2, num)

local max = math.

max(p1.x, p2.x)

local min = math.

min(p1.x, p2.x)

if num < min or num > max then

--print

("超出範圍 gety1"

, num, max, num)

return-1

endif max == min then

if num == max then

return p1.y

else

return-1

endend

local n1 =

(p2.y - p1.y)

/(p2.x - p1.x)

print

("n1"

, n1, p2.y, p1.y, p2.x, p1.x)

local numy =

(num - p1.x)

* n1 + p1.y

return numy

end

local y1 =

gety1

(pos1, pos2, x)

local y2 =

gety1

(pos2, pos3, x)

local y3 =

gety1

(pos3, pos4, x)

local y4 =

gety1

(pos4, pos1, x)

print

("獲取的第乙個值是y"

, x, y1, y2, y3, y4)

local point =

if y1 ~=-

1 then

table.

insert

(point, y1)

end

if y2 ~=-

1 then

table.

insert

(point, y2)

end

if y3 ~=-

1 then

table.

insert

(point, y3)

end

if y4 ~=-

1 then

table.

insert

(point, y4)

endlocal y = math.

random

(point[1]

, point[2]

)print

("最終值"

, x, y, point[1]

, point[2]

)--檢測是否在矩形內

local inpoint =

ispointinmatrix

(pos1,pos2,pos3,pos4, cc.

p(x, y)

)if not inpoint then

else

endend

好沒有技術含量呀, 怪我太菜,後面寫有技術難度的演算法

演算法適用凸多邊形

c OpenCV 不規則四邊形轉矩形(二)

直通車 2.如下 重要的函式我都給了注釋 include opencv2 highgui.hpp include opencv2 imgproc.hpp include include using namespace cv using namespace std function main int ...

獲取不規則四邊形對邊中點連線的座標

前言 em。遇見要求不規則四邊形對邊中點連線的問題 比如求上邊和底邊 思路 假設不規則四邊形在第一象限 求兩個對角點的相鄰邊的中點,因為上邊和底邊的中點 y座標 是最大的和最小的。所以求出四個中點後,比較 y座標 最大和最小的就是 上邊和底邊的中點 下面是求上邊和底邊的座標,左邊和右邊就比較最小和最...

N個點求最大的四邊形面積

題意 平面上n個點 n 300 問任意四個點組成的四邊形 保證四條邊不相交 的最大面積是多少。分析 1 第一思路是列舉四個點,以o n4 的演算法妥妥超時。2 以下思路源自官方題解 以o n2 列舉每一條邊,以這條邊作為四邊形的對角線 注意 這裡所說的對角線是指把四邊形分成兩部分的線,不考慮凹四邊形...