2010-04-29 4 views
1

나는 간단한 튜토리얼을 진행하고 있는데, 어두운 회색 영역 안의 임의의 부분에있는 이미지에서 빨간색과 녹색 상자의 위치를 ​​무작위로 생성하고 싶습니다. 이를 위해 특별히 훌륭한 알고리즘이 있습니까? 내가 가지고있는 해킹 된 아이디어가 정말 간단합니다 (좌표가 내부 직사각형 바깥에 있지 않는 동안 생성을 계속합니다).하지만 누군가가 깔끔한 해결책을 찾지 못했는지 궁금합니다.사각형 외부 영역에서 임의의 좌표를 생성 하시겠습니까?

도움 주셔서 감사합니다.

alt text

답변

3

단순 그 자체로 우아함의 일종이다, 그래서 나는 존에 동의하십시오 Monte Carlo approach을 가지고 유효한 값을 얻을 때까지 샘플링을 계속합니다.

당신이 흰색 상자 내부의 적색 또는 녹색 사각형을 놓지 않겠다고 보장하고 싶다면, 다음과 같은 간단한 알고리즘을 사용할 수 있습니다 높이 시간 S을 결정

  • 및 너비가 w S입니다.

  • 분할 흰색 상자에 의해 정의 된 장방형 영역 8 R = {R 1, R 2 ... R 8}로 회색 영역. (중앙에 흰색 상자가있는 tic-tac-toe grid를 상상해 보라. 이것은 8 개의 주변 지역을 정의한다.)

  • P하자 (SR에 배치 I) A (R을 = I)/A (R) 여기서, A (R I) S의 중심이 배치 될 수있는 영역입니다. 즉, 영역의 영역 인 h i - h S) & middot; ( I R w - w S).

  • 위의 확률에 따라 지역을 선택하십시오. 그런 다음 사용 가능한 x 및 y 좌표의 균일 한 분포에서 해당 영역의 점을 선택합니다.

  • 완료!

3

방법 "유효한 값을 얻을 때까지 계속 샘플링"많이하지 않습니다 당신이 회색 사각형에 대해 매우 큰 흰색 사각형을해야 기회가 아니라면 개인적으로 간단한 함께 갈 것 더 커. 나에게 더 단순한 것이 거의 항상 더 좋다.

대안은 가능한 픽셀 수를 알아 내고 해당 범위에서 임의의 숫자를 생성하는 것입니다. 그런 다음 효과적으로 왼쪽 상단에서 하단 오른쪽으로 픽셀의 번호를 매 깁니다. 주어진 무작위 샘플이 상단 섹션, 하단 섹션 또는 중간에 있는지 여부를 확인합니다 (흰색 직사각형의 맨 위 줄에있는 첫 번째 픽셀보다 작은 지 또는 맨 위에있는 첫 번째 픽셀보다 작은 지 볼 수 있음). 흰색 직사각형 아래의 선). 일단 작업을 완료하면 행을 처리 한 다음 행 내의 픽셀을 처리하는 것이 간단합니다. 이것은 대단히 어렵지는 않지만 입니다. 이것은 하나의 임의의 픽셀을 결정하는 것입니다. 큰 사각형을 생성 할 때 사각형의 왼쪽 위 모서리에 대한 유효한 픽셀의 범위를 고려해야하며 의 샘플을 찾으려면 범위를 찾으십시오.

관련 문제