2012-05-24 3 views
2

잡음을 생성하기 위해 컴퓨터 프로그램에서 3D 볼륨에서 임의의 2D 슬라이스를 얻고 싶습니다. 회전 행렬을 사용하기로 결정했습니다. 회전 행렬은 회전 그룹 SO (3)의 멤버 여야합니다. 이 그룹의 멤버를 일률적으로 임의로 만들려면 어떻게해야합니까?3D 볼륨에서 랜덤 2D 슬라이스

답변

3

세 랜덤 값을 선택 U 1, U 2 및 U 3is given by

균일 랜덤 쿼터니언 0 내지 1 :

  • =의 SQRT w (1 - u) sin (2pi * u)

  • X = SQRT (1 - U 1) COS (2pi * 유 2)

  • Y = SQRT (U 1) 죄 (2pi * U 3)

  • Z = SQRT (U 1) COS (2pi * 유 3)

그런 다음 생성 할 this formula를 사용하여 적절한 회전 매트릭스 :로부터 선택된 3 개 난수로부터 일정한 방향을 얻기 위하여

|  2  2        | 
    | 1 - 2y - 2z 2xy - 2zw  2xz + 2yw  | 
    |            | 
    |      2  2    | 
M = | 2xy + 2zw  1 - 2x - 2z 2yz - 2xw  | 
    |            | 
    |          2  2 | 
    | 2xz - 2yw  2yz + 2xw  1 - 2x - 2y | 
    |            | 
1

3 개의 독립적 인 확률 변수로 구성된 임의의 3D 벡터를 각 축으로 그릴 수 있습니다. 그런 다음이 벡터를 임의의 2D 슬라이스의 법선 벡터와 원점에서 2D 슬라이스까지의 거리로 정의 할 수 있습니다. 나는이 접근법이 가능한 2D 슬라이스에 대해 균일 한 분포를 가져야한다는 것을 공식적인 증거 없이는 확신하지만 (이전의 진술은 근본적으로 비공식적이다).

편집 : 두 번째 생각에, 원점에서 2D 슬라이스까지의 거리를 나타내는 독립 변수를 그려야합니다. 그렇지 않으면 원점으로부터 일정 거리 떨어져있을 가능성이 높은 2D 슬라이스가 배포됩니다.

+0

는 '[-1..1]'는 길이가 1' '보다 큰 벡터를 거부해야한다 . 불안정을 피하기 위해 길이가 상당히 작은 값 (예 :'0.1')보다 작은 벡터를 거부 할 수도 있습니다. "거절"은 3 개의 새로운 난수를 생성하고 거절되지 않은 벡터를 생성 할 때까지 반복합니다 (평균적으로 빨리 발생해야 함). – comingstorm