Generování rozptýlených bodů v rovině

Jara

Generování rozptýlených bodů v rovině
« kdy: 21. 08. 2014, 08:27:37 »
Zdravim,
poradte prosim jak generovat rozptylene body v rovine XY (chci se vyhnout uhlednym mrizkam bodu a misto toho neco rozptyleneho jako kdyz si pocukrujete buchtu). Vysledkem bude textovy soubor se souradnicemi bodu.

Mam predstavu, ze zadam pocet bodu a tvar uvnitr ktereho se to vytvori (kdruh, mezikruzi, trojuhelnik apod.). V dalsim kroku bych uvital i tvorbu shluku bodu.
Dekuji, J.

« Poslední změna: 21. 08. 2014, 10:18:24 od Petr Krčmář »


Re:Generovani rozptylenych bodu v rovine
« Odpověď #1 kdy: 21. 08. 2014, 08:52:24 »
Vytvoříte si obdélník kolem zadaného tvaru, a generujete náhodné souřadnice x a y v rozsahu toho obdélníku. U každého bodu zjistíte, zda patří do zadaného tvaru, pokud ano, tak jej zapíšete a zvednete čítač o jedničku. Opakujete tak dlouho, dokud nemáte zadaný počet bodů.
V dalším kroku si nejprve musíte nadefinovat, co je shluk bodů.

v

Re:Generovani rozptylenych bodu v rovine
« Odpověď #2 kdy: 21. 08. 2014, 10:05:02 »
já bych si nejdřív vytvořil funkci, která vygeneruje sadu náhodných bodů v okolí zadaného bodu o daném průměru, v pythonu může vypadat třeba takhle:
Kód: [Vybrat]
def rp(x, y, r, c) :
    for i in range(c) :
        yield (x + (r*uniform(-1.0,1.0)), y + (r*uniform(-1.0,1.0)))
a následně ji použil na sadu počátečních bodů (ne nutně náhodných) nacházejích se v žádané oblasti, např. na kruhu s použitím pythonu:
Kód: [Vybrat]
x, y, C = [], [], 20
for i in range(C) :
    p = cmath.rect(100, i*(2*pi/C))
    for vx, vy in rp(p.real, p.imag, 20, 10) :
        x.append(vx)
        y.append(vy)
v kruhu by pak byl počáteční bod jen jeden, na trojúhelníku by to byly tři sady bodů na třech úsečkách atd.

Re:Generovani rozptylenych bodu v rovine
« Odpověď #3 kdy: 21. 08. 2014, 10:12:48 »
Zdravim,
poradte prosim jak generovat rozptylene body v rovine XY ...
... V dalsim kroku bych uvital i tvorbu shluku bodu.
Dekuji, J.

Zkouška už je tento pátek?

František

Re:Generovani rozptylenych bodu v rovine
« Odpověď #4 kdy: 21. 08. 2014, 10:14:41 »
Shluky lze vygenerovat mnoha a mnoha různými způsoby, například to patero různých algoritmů:
  • Vygenerujete body do dané oblasti náhodně. Pak budete procházet dvojice již vygenerovaných bodů. Bude-li dvojice bodů blízko sebe, posunete body k sobě, aby se vzdálenost ještě snížila. Bude-li dvojice bodů daleko od sebe, ještě vzdálenost zvětšíte. Postupně body vytvoří shluky.
  • Vygenerujete nadbytek bodů do dané oblasti náhodně. Pak odstraníte všechny body, v jejichž blízkosti není jiný bod. Tím zvýrazníte fluktuace v hustotě, a vytvoříte shluky.
  • Vygenerujete náhodně jeden bod. V každém kroku vygenerujete na zkoušku pět bodů, z kterých vždy ponecháte jeden. Ponecháte ten s nejhustším okolím.
  • Vygenerujete první bod náhodně. Nastavíte vzdálenost r. V dalších krocích budete vzdálenost r pomalu snižovat. Vyberete jeden bod A z již vygenerovaných. Náhodně vygenerujete úhel fí. Z bodu A povedete polopřímku pod úhlem fí a na této polopřímce naleznete bod ve vzdálenosti r. Nalezený bod zařadíte mezi vygenerované. (Nějak dodefinujete přechod při opuštění oblasti, přechod přes okraj.
  • Vygenerujete první bod. Vygenerujete náhodně krátký vektor. Uděláte posun o tento vektor a vykreslíte bod. (Nějak dodefinujete přechod při opuštění oblasti, přechod přes okraj.) Opakováním nasimulujete Brownův pohyb, při němž se vytvářejí shluky
  • Rozdělíte si oblast do několika stejně velkých podoblastí, například čtverec rozpůlíte na čtyři stejně velké čtverce. Každé podoblasti určíte počet generovaných bodů, které v ní budou umístěny. Body nebudou v oblastech rovnoměrně rozděleny. Krok rekurzí opakujete. Jak se zmenšuje velkikost oblastí, tak se zpřesňuje poloha bodů. Nakonec získáte přesnou polohu.

 


Jara

Re:Generování rozptýlených bodů v rovině
« Odpověď #5 kdy: 21. 08. 2014, 11:19:23 »
dekuji vsem za namety, to mi staci

hawran: otri brkem sklenenou kouli, dneska mas spatny obraz  ;-)

sheery

Re:Generování rozptýlených bodů v rovině
« Odpověď #6 kdy: 21. 08. 2014, 15:23:38 »
Přísahal bych že jsem nedávno četl článek který porovnával různé algoritmy pro rozmístění bodů v rovině. Ale nemohu ho najít. Tak alespoň tento rychle nalezený odkaz který ukazuje jednu z těch metod která dává sice nenáhodné ale naopak hezké rozložení http://devmag.org.za/2009/05/03/poisson-disk-sampling/