2013-01-25 4 views
2

부스트 랜덤 생성기를 사용하여 무작위 점을 평면 위에 균일하게 분포 시키려고합니다. 여기 Boost random number generator 2 차원에서 부스트 랜덤

  • 들이 단일 차원에서 int으로 번호를 생성하는 boost::uniform_int<>를 사용 : 나는 하나의 차원에서 그 일을 위해 다음 링크를 가지고있다.

    그러나 제 경우에는 평면 위에 2 차원 숫자 float을 생성하고 싶습니다.

    2 차원에서 사용할 수있는 배포 유형이 있습니까? (나는 boost::uniform_on_sphere을 보았지만 구형 표면을 보았습니다.)

답변

0

uniform_01 분포를 사용하여 두 개의 난수를 생성하여 x 및 y 좌표를 제공합니다. 이에 따라 스케일 : xa에 균일 한 분포 0를 다음과 y 다음 (x, y) 균일 특별한 방법없이 사각형 (0,0)-(a,b)에 분포하는 점 0 b에 균일 한 분포를 다음과

+0

x 축 및 y 축에 대해 하나를 선언하려면 다음과 같이하십시오. boost :: uniform_01 <> for_x_axis (0,2); boost :: uniform_01 <> for_y_axis (0,4); –

+0

'uniform_01'은'[0,1] 간격 (중요 할지도 모르겠다!) 간격으로 요소를 생성한다는 인상하에 있었기 때문에 하나의 분포를 취하여 두 개의 값을 스케일링 인수로 곱합니다 . 당신은 또한 이것을 위해 Boost를 필요로하지 않는다. 매우 유사한 라이브러리가 C++ 11에서''로 사용 가능하다. – filmor

+0

'std :: uniform_real_distribution'는 참으로 두 개의 매개 변수를 취합니다. – filmor

0

합니다. 하나가 아닌 두 개의 난수를 생성하십시오.

예를 들어 (구에 대해 말하면서) 원의 가장자리에서 다르게 분배해야합니다.

+0

동일한 클래스 boost :: uniform_int를 사용하는 두 개의 임의의 숫자가 따로 같은가요? –

+0

균일 한 분포 알고리즘 인 경우, 생성 알고리즘에 관계없이 임의의 두 난수와 같습니다. – h22

+0

x와 y 축에서 각각 임의로 난수를 생성한다고 생각해 봅시다. 그런 다음이 값을 결합하여 평면에 여러 점을 형성하십시오. 우리가 그렇게한다면, 독립적 인 단일 배포판은 괜찮을 것이다. 그러나 결합 된 것은 균일 한 분배 방식으로 이루어지지 않을 것입니다. 아마 그것은 바뀔 것입니다. –