Véletlenszerű pontok generálása?
Ellenőrzés:
Y értéke [DA egyenesnél nagyobb] ÉS [AB egyenesnél nagyobb] ÉS [DC egyenesnél kisebb] ÉS [AC egyenesnél kisebb]
Véletlen elosztás: na ezt nem tudom, talán az lenne a legjobb (de nem túl hatékony) megoldás, ha az egész vászonra generálsz pontokat, és a rajzoló ciklusod csak akkor rajzolja ki, ha a négyszögön belül van (ellenőrző függvény).
Szűkítsük a kört egy picit. Téglalap, konvex négyszög, vagy bármilyen (konvex/konkáv) négyszög érdekel? Le tudom írni de ha például csak téglalap érdekel téged, nem fogom elkezdeni legépelni hogy lehet egy tetszőleges konkáv négyszög belsejébe generálni pontot..
Általánosságban: generálj egy pontot a négyszöged koordináta-rendszerébe és transzformáld át a kiinduló koordinátarendszerbe (forgatás, eltolás).
De nem csak téglalap? Bármilyen konvex négyszög lehet?
Ha téglalap, akkor tényleg nagyon egyszerű, kell egy random pont a téglalapban (2 random koordináta, egyenletes eloszlással), és el kell forgatni+eltolni. Ahogy a második válazoló irta.
Konvex négyszögre fel kell bontani a négyszöget két háromszögre és egyenként kirajzolni mind a kettőt.
Legyen a két háromszöged csúcsai:
A, B, C és
C, D, A
Leírom az első esetre:
Told el a háromszöget úgy hogy az A csúcsa az origóban legyen, ekkora a három csúcsa:
O, v1=B-A, v2=C-A
v = v1*rand1 + v2*rand2 egy paralelogrammát fog neked meghatározni (gondolj bele) ahol rand1 és rand2 értéke egy [0...1] halmazba eső random szám.
Ha a v pont a paralelogramma "rossz" felére esik, eldobhatod vagy tükrözheted középpontosan hogy beleessen a háromszögedbe.
Megnézed hogy a v2-v1 vektor jó felére esik e v:
det = v2.x-v1.x * v.y-v1.y - v2.y-v1.y * v.x-v1.x
Ahol det negatív ha a rossz felére esik, pozitív ha a jó felére, 0 ha ráesik az egyenesre (3d-ben keresztszorzatot használunk erre)
Ha negatív a det tükrözöl (v1+v2)/2 pontra (vagy dobod):
v = (v1 + v2) - v
Végül visszatolod az eredeti pozíciójába az origóból:
v = v + A
Megcsinálod ezt a másik háromszögre is.
Pythonban:
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!