Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Jara 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.
-
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ů.
-
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:
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:
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.
-
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?
-
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.
-
dekuji vsem za namety, to mi staci
hawran: otri brkem sklenenou kouli, dneska mas spatny obraz ;-)
-
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/