使用python和opencv在矩形內隨機生成不相交的相同圓形
import cv2
import numpy as np
# 生成隨機圓
class
random_circle
(object):
def__init__
(self,minnum,maxnum,height,width,radius)
: self.circle = np.random.randint(minnum,maxnum)
#生成隨機圓形個數
self.h = height #影象高
self.w = width #影象寬
self.radius = radius #圓的半徑
self.circle_pos =
#儲存圓心座標
self.img = self.create_img(
)#生成影象
#檢測隨機生成的圓心與之前生成的圓心距離
defradius_detect
(self,x,y):if
(self.circle_pos)
:#排除第乙個無法比較的圓心
for pos in self.circle_pos:
#列舉所有之前生成的圓心座標if(
((pos[0]
-x)**2+
(pos[1]
-y)**2)
**0.5
>=self.radius*2)
:#比較兩點距離與半徑*2的大小
continue
#若大於等於,則繼續比較
else
:return
1#若小於,則繼續迴圈生成隨機圓心座標
return
0#列舉結束,跳出迴圈
else
:return
0def
create_img
(self)
: background = np.ones(
(self.h,self.w)
,np.uint8)
#生成黑色背景
for num in
range(0
,self.circle)
: x = np.random.randint(self.radius,self.w-self.radius)
#防止圓形跑到邊界外
y = np.random.randint(self.radius,self.h-self.radius)
while
(self.radius_detect(x,y)):
#比較是否重合
x = np.random.randint(self.radius,self.w-self.radius)
y = np.random.randint(self.radius,self.h-self.radius)
(x,y)
)#將不重合的圓新增到圓心座標中
img = cv2.circle(background,
(x,y)
,self.radius,
(255
,255
,255),
-1)#描繪所有圓
return img
if __name__ ==
"__main__"
:#隨機生成10-50個圓,影象高600,寬900,圓的半徑20
rand = random_circle(minnum=
10,maxnum=
50,height=
600,width=
900,radius=
20)
circle = rand.circle #讀取圓的個數
img = rand.img #讀取影象
print
(circle)
#列印個數
cv2.imshow(
"circle"
,img)
#顯示影象
cv2.waitkey(0)
cv2.destroyallwindows(
)
結果如下圖
leetcode在圓內隨機生成點
1.拒絕取樣 在乙個半徑為r的圓內均勻隨機生成點,可以使用拒絕取樣 rand rand max隨機產生0 1之間的數,設其值為x,則2 x 1隨機產生 1 1之間的數 則 2 x 1 r則隨機產生 r r之間的數 對於y同理 如下 class solution vectorrandpoint you...
478 在圓內隨機生成點
題目描述 給定圓的半徑和圓心的 x y 座標,寫乙個在圓中產生均勻隨機點的函式 randpoint 說明 輸入值和輸出值都將是浮點數。圓的半徑和圓心的 x y 座標將作為引數傳遞給類的建構函式。圓周上的點也認為是在圓中。randpoint 返回乙個包含隨機點的x座標和y座標的大小為2的陣列。示例 1...
478 在圓內隨機生成點 C
拒絕取樣 如果生成的點不符合條件就再生成一次,直至生成的點符合條件 rand 返回一隨機數值的範圍在 0 至 rand max 間。double rand rand max就是0 1.0 2 double rand rand max 1.0就是 1.0 1.0 class solution vect...