在矩形內隨機生成不相交的相同圓形

2021-10-08 20:50:07 字數 2176 閱讀 4081

使用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...