2012-02-08 5 views
2

원통의 반경 r과 높이 h가 주어지면 원형 원통의 부피 안에 무작위 3d 점 [x, y, z]를 생성하는 가장 좋은 방법 또는 알고리즘은 무엇입니까?원통의 무작위 점 생성

+0

이 답변은 실린더가 z 축과 정렬되어 있다고 가정합니다. 이 답변으로 충분합니까? 아니면 비표준 축을 따라 유사한 실린더를 계산할 방법이 필요합니까? –

+0

아래의 답변은 실린더의 볼륨 내에 균일하게 분포 된 지점을 원한다고 가정합니다. 원하는 것이 아닌지 명확하게 명시해야합니다. – andand

+0

실린더가 비표준 축을 따른다면 접근법을 좋아합니다. – user1198477

답변

2

원통을 둘러싸는 직사각형 솔리드 내부에 임의의 점을 생성합니다. 그것이 실린더 안에 있다면 (확률 pi/4), 그것을 유지하십시오, 그렇지 않으면 그것을 버리고 다시 시도하십시오.

+1

** 종료 가능성이 ** 있습니다 **. 네가 잘못하지 않았으니 너를 다운시킬 가치는 없지만 이것은 언급할만한 가치가있다. –

0

무작위 각도 (선택적으로 2π보다 작음), 반경보다 작은 임의의 r 및 높이보다 작은 임의의 z을 생성하십시오.

x = r * cos(angle) 
y = r * sin(angle) 
+1

DSM의 게시물에있는 링크를 봐야합니다. OP가 실린더의 부피 내에서 점들이 균일하게 분포되어야한다고 말하지는 않지만, 암시되어있는 것으로 보입니다. 솔루션은 z 축을 따라 더 밀집된 점을 클러스터링합니다. 균등하게 배포하려면'r'을'sqrt (r)'로 변경하십시오. – andand

+0

@andand : 예. 나는 이미 그를지지했다. 그러나 나는 그의 대답을 훔치고 싶지 않았다. – SLaks

0

z 축은 쉽다 : -0.5의 * h를 < = Z < = 0.5 * h를

X 및 Y는 것이다 서클 같다 : X^2 + y^2 < = R^2

Buth 수학은

+0

실례지만 '0 <= z <= h'가 아니어야합니까? –

+0

실린더가 z 방향의 중심에 있다고 가정하면 내 '원통'중심은 (0, 0, 0)이라고 가정하면이 점이 달라집니다. –

+0

아. 권리. 공정하다. –

9

:-) 나를 위해 오래 전에하는 방법에 대한 - 파이썬 의사에,시키는 R은 반지름하고 H는 높이가 될 :

s = random.uniform(0, 1) 
theta = random.uniform(0, 2*pi) 
z = random.uniform(0, H) 
r = sqrt(s)*R 
x = r * cos(theta) 
y = r * sin(theta) 
z = z # .. for symmetry :-) 

간단히 x = r * cos(angle)y = r * sin(angle)을 취하는 문제는 r이 작 으면, 즉 원의 중심에서 r의 미세한 변화가 x 및 y 위치를 대폭 변경하지 않는다는 것입니다. IOW, 그것은 데카르트 좌표에서 비 균일 분포로 이어지고 점들은 원의 중심쪽으로 집중됩니다. 제곱근을 취하는 것은 적어도 제 산술을 올바르게 수행했다면이를 수정합니다.

는 [아가 SQRT was right 같다.]

(I 실린더는 Z 축과 정렬되며, 실린더 중심의 위치는 그것이을 생각하지 않고 가정 유의 (0,0, H/2) 실린더 중심에서 (0,0,0)을 설정하는 것은 덜 임의적입니다.이 경우 z는 0, H가 아닌 -H/2와 H/2 사이에서 선택해야합니다.

+0

실린더가 비표준 축을 따른다면 접근법을 좋아합니다. – user1198477