Kezdőoldal » Számítástechnika » Programozás » Véletlenszerű pontok generálása?

Véletlenszerű pontok generálása?

Figyelt kérdés
Adott egy 2D koordináta rendszer, ezen belül egy elfordított négyszög. Hogyan tudnék olyan pontokat generálni amik ezen belül esnek, és megfelelő darabszámnál kitöltik az egészet nem csak a közepét. Paintes mestermű szemléltetésnek: [link]

2015. dec. 19. 10:12
 1/7 |Orfeusz| ***** válasza:

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).

2015. dec. 19. 10:37
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:

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).

2015. dec. 19. 12:52
Hasznos számodra ez a válasz?
 3/7 A kérdező kommentje:
Még csak az hiányozna, hogy konkáv legyen. Konvex négyszögre kéne.
2015. dec. 19. 16:34
 4/7 anonim ***** válasza:

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.

2015. dec. 19. 17:54
Hasznos számodra ez a válasz?
 5/7 anonim ***** válasza:

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:

[link]

2015. dec. 19. 18:36
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:
Még az elfelejtettem leírni hogy akkor lesz egyenletes eloszlású ha a háromszögek területével súlyozod azt az esélyt ami megmondja hogy melyik háromszögbe rajzolj. Beleírtam a kódba ha kéne.
2015. dec. 19. 20:34
Hasznos számodra ez a válasz?
 7/7 A kérdező kommentje:
Koszonom szepen.
2015. dec. 19. 21:24

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!