Próbowałem symulować wstrzykiwanie losowych punktów w kółko, tak aby dowolna część koła miała takie samo prawdopodobieństwo wystąpienia wady. Spodziewałem się, że liczenie na pole wynikowego rozkładu będzie zgodne z rozkładem Poissona, jeśli podzielę okrąg na prostokąty o równej powierzchni.
Ponieważ wymaga to jedynie umieszczenia punktów w obszarze kołowym, wstrzyknąłem dwa równomierne rozkłady losowe we współrzędnych biegunowych: (promień) i (kąt biegunowy).
Ale po wykonaniu tego zastrzyku wyraźnie dostaję więcej punktów na środku koła w porównaniu do krawędzi.
Jaki byłby prawidłowy sposób wykonania tego wstrzyknięcia przez okrąg, tak aby punkty były losowo rozmieszczone w kręgu?
random-generation
circular-statistics
Jonjilla
źródło
źródło
Odpowiedzi:
Chcesz, aby proporcja punktów była jednakowo proporcjonalna do powierzchni, a nie do odległości od początku. Ponieważ powierzchnia jest proporcjonalna do kwadratu odległości, wygeneruj jednolite losowe promienie i weź ich pierwiastki kwadratowe. Połącz to z jednolitym kątem biegunowym.
Jest to szybkie i proste do kodowania, wydajne w wykonaniu (szczególnie na platformie równoległej) i generuje dokładnie określoną liczbę punktów.
Przykład
To działa
R
kod ilustrujący algorytm.źródło
Można zastosować próbkowanie odrzucenia . Oznacza to, że możemy próbkować z jednorodnego rozkładu 2D i wybierać próbki spełniające warunki dysku.
Oto przykład.
źródło
Dam ci ogólną n-wymiarową odpowiedź, która oczywiście działa również w przypadku dwuwymiarowej. W trzech wymiarach analog dysku jest objętością litej kuli (kuli).
Omówię dwa podejścia. Jeden z nich nazwałbym „precyzyjnym” , a dostaniesz z nim kompletne rozwiązanie w R. Drugi, który nazywam heurystyczny , i to tylko pomysł, nie ma pełnego rozwiązania.
„Precyzyjne” rozwiązanie
Moje rozwiązanie oparte jest na pracach Marsaglii i Mullera . Zasadniczo dzieje się tak, że wektor Gaussa znormalizowany do swojej normy dałby równomiernie rozmieszczone punkty na hipersferze d-wymiarowej:
Oto fragment kodu dla przypadku 3D, czyli litej kuli:
Podejście heurystyczne
Dlaczego ma to znaczenie dla naszego problemu? Załóżmy, że chcesz wygenerować d losowe liczby jednolite, byłyby to losowe punkty wewnątrz hipersześcianu d-wymiarowego. Następnie stosuje się próbkowanie odrzucenia, aby wybrać punkty wewnątrz hipersfery (aka n-ball):∑rei = 1x2)ja< R2)
źródło
Oto alternatywne rozwiązanie w
R
:źródło
r <- seq(0, 1, by=1/10)
aby wyraźniej zobaczyć jego dyskretną naturę.r
z Uniform (0,1).