Генерирайте N точки в рамките на квадрат (равномерно)

Искам да генерирам N точки в квадрат (равномерно). как мога да постигна това?


person Soheil Ghahremani    schedule 24.11.2013    source източник
comment
Те могат да бъдат произволни или могат да бъдат еднакви. Не могат да бъдат и двете.   -  person T.J. Crowder    schedule 24.11.2013
comment
Искате да кажете, че искате произволните точки да бъдат равномерно разпределени върху квадрата за много серии? Ако винаги бяха равномерно разпределени в една и съща серия, нямаше да са произволни.   -  person Robin Green    schedule 24.11.2013
comment
tnx, редактирах въпроса. това е моя грешка   -  person Soheil Ghahremani    schedule 24.11.2013
comment
Мразя да говоря за подобни неща, но какво опитахте?   -  person SimplyPanda    schedule 24.11.2013
comment
ако N е степен на 2. мога да разделя квадрата на N клетки и да поставя по една точка във всяка клетка.   -  person Soheil Ghahremani    schedule 24.11.2013
comment
Все още не разбирам. Искате ли детерминистичен (неслучаен, винаги един и същ) модел от точки, които са еднакво разположени в рамките на квадрат. Или искате да вземете проби от N точки от квадрат с равни вероятности във всички местоположения на квадрата?   -  person Hannes Ovrén    schedule 26.11.2013


Отговори (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.

person tweaking    schedule 26.11.2013