Искам да генерирам N точки в квадрат (равномерно). как мога да постигна това?
Генерирайте N точки в рамките на квадрат (равномерно)
Отговори (1)
Доста готин проблем и много по-труден, отколкото си представях, но ето идеята. Има документи за това за n-ъгълници, но аз просто ще направя квадрата. Така че равномерното разпределение от окръжност е често срещан проблем и не можете просто да извадите радиуса, r
, и ъгъла, theta
, независимо, тъй като се дава по-голяма тежест на голям радиус, т.е. ако вземем безкрайно малък пръстен, имате повече площ, идваща от по-голям радиус, по-далеч от центъра, така че вземаме проби равномерно от r^2
, тъй като площта е функция на r^2
.
Сега идеята е подобна за правоъгълник, неговата симетрия се поддава да бъде уловена с известна мярка за въртене (ъгъл) и разстояние от началото (радиус), но забележете, че радиусът се променя драстично, докато се въртите около кръг, отива нагоре и надолу после нагоре и надолу. имаме нужда от начин да предпишем радиуса въз основа на ъгъла, така че масата му във всяка дадена точка да е еднаква.
Помислете за следната конструкция (можем да ориентираме квадрата така, че да стои на една от страните си, но това е по-интуитивно) Съжалявам, моите диаграми са зле начертани
A
X
B O C
D
Ето нашия квадрат, като A, B, C, D са ъглите, а O е началото. Ще обясним X по-късно. Нека започнем от точка С и завъртим обратно на часовниковата стрелка и ъгълът ще бъде означен като Тита. X е пресечната точка с ръба на квадрата, ако начертаем права от O с ъгъл Theta. С други думи, X = r(Theta). Това, което се опитваме да направим, е да уловим разстоянието r като функция на тита, за да направим това равномерно вероятностно разпределение на тита. Това е цялата идея..
можем да напишем следното със закона на синусите
Sin(pi - Theta - pi/4)/c = sin(pi/4)/r(Theta) where C sits at (c,0)
направете малко алгебра и стигнете до
r(Theta) = sqrt(2)*c / (2sin(3pi/4 - Theta)
сега се нуждаем от постоянно k, така че интегрирането на k*r(Theta) да ви даде 1, което лесно можете да направите.
имам
a*sin(pi/4)ln|tan((Theta+pi/4)/2)| evaluated from 0 to pi/4
успешно изградихте p.d.f. (функция на разпределение на вероятностите) за вашия r(Theta), сега изчислете c.d.f. (функция за кумулативно разпределение), настройте го на равномерно и получете израз на затворена форма за вашата Theta.
досега конструирахме произволната тета, за да изградим радиуса r, осъзнаваме, че подобно на окръжност имаме повече маса по-далеч и можем да я конструираме като
R = r(Theta)/s
където s е равномерно от 0 до 1.
ние използваме r(Theta)
, защото това е максималната възможна стойност, дадена Theta.