[Alg/Wiskunde] Bepalen locatie in spelwereld

Pagina: 1
Acties:

  • Potatoman
  • Registratie: September 2000
  • Laatst online: 13:43
Ik ben bezig met het maken van een 'strategieachtig' spelletje, en ik zit een beetje met een probleem :'(

Afbeeldingslocatie: http://members.home.nl/rheide/ex1.gif

Het plaatje is een voorbeeldrooster van het speelveld zoals het weergegeven wordt op het scherm.
Ik heb het even zonder perspectief gedaan, want dan kan ik het beter uitleggen :)

Het probleem is zo: hoe bepaal ik snel en exact (wiskundig) op welk vakje geklikt wordt?
Op het moment roep ik van elk vakje de polygoon op, en controleer of het klikpunt binnen de grenzen van de polygoon ligt.
Dit kost natuurlijk veel te veel tijd en het kan volgens mij veel eenvoudiger. Ik heb vanmiddag dan ook flink lopen prutsen om het mbv een berekening of een snelle zoekmethode op te lossen, maar het wil toch echt niet lukken.

Het lijkt mij zelf het eenvoudigst om de coördinaten te 'vertalen' naar een systeem zoals op het volgende plaatje:
Afbeeldingslocatie: http://members.home.nl/rheide/ex2.gif

Op deze manier kan ik simpelweg de breedte en hoogte van het vakje delen door de x en y coördinaat waarop geklikt is, en ik heb het juiste vakje.
Maar hoe doe ik het vertalen, en is het mogelijk en makkelijk om het op die manier te doen :?
Andere suggesties voor het oplossen van mijn probleem zijn natuurlijk ook welkom :)
Ik wist trouwens niet of dit topic beter in P&W of SG kon staan. Ik heb het in P&W geplaatst, omdat ik het daar beter vind passen :*)

The cyclographing developer


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Rotatie is een simpele lineaire transformatie:

w2 = sqrt(2)

p = w2 *x + w2 * y
q = w2 *x - w2 * y

Precies de inverse van je teken transformatie dus

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Potatoman
  • Registratie: September 2000
  • Laatst online: 13:43
MSalters schreef op 10 juli 2003 @ 17:44:
Rotatie is een simpele lineaire transformatie:

w2 = sqrt(2)

p = w2 *x + w2 * y
q = w2 *x - w2 * y

Precies de inverse van je teken transformatie dus
Ok, maar ik gebruik geen tekentransformatie :+ Anders kon ik het zelf ook nog wel bedenken :)
Maar ik heb nu iig een idee in welke richting ik moet zoeken :)

The cyclographing developer


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Zoek eens op de term 'raycasting'.

Professionele website nodig?


  • MisterData
  • Registratie: September 2001
  • Laatst online: 19:41
Misschien zou je wasigh het kunnen vragen, die had geloof ik zelf een isometrische engine gemaakt die dat kon :)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

* curry684 heeft hier wel een boek staan waar het voor true-3D engines in uitgelegd staat...

Professionele website nodig?


  • MisterData
  • Registratie: September 2001
  • Laatst online: 19:41
curry684 schreef op 10 July 2003 @ 21:14:
* curry684 heeft hier wel een boek staan waar het voor true-3D engines in uitgelegd staat...
Je zou eventueel een id-buffer kunnen gebruiken. Dan zet je daar tijdens het renderen in per pixel van welk object je die pixel rendert.... tis de aanpak die wordt gebruikt in deze 3d engine. Maar een wiskundige-formule is natuurlijk mooier...

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Hmm heb ff dat boek opgezocht maar die maken gebruik van beschikbare D3DX (Direct 3D eXtension library) om het te onderzoeken, heb je dus niet veel aan :/

Professionele website nodig?


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 17:28

alienfruit

the alien you never expected

Als je zorgt dat dat quads altijd dezelfde grote hebben, en je de graden bij houd kun je toch wel van zelf wel uitrekenen waar je hebt geklikt? Ben momenteel uitgeput van die vervelende zomerrooster van NS (nu sluit me bus helemaal niet meer aan :p) dus heb nu niet de puf om effe met een wiskunde formule op te proppen te komen

Trouwens kun je niet gewoon de space coordinaten opslaan in een array en vervolgens deze checken tegen over de coordinaten dmv.

Hou trouwens rekenin mee met mogelijke scrolling functie _en_ afrodings fouten als je gaat delen met de mapsize!

[ Voor 30% gewijzigd door alienfruit op 10-07-2003 22:20 ]


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
a) aangezien je het zelf tekent heb je zowieso de hoek + het rotatie punt.
b) dan neem je de vector van het midden (0,0) tot je punt. Deze draai je dan in de opposite direction.
c) aangezien je weet waar je middelpunt zich bevind weet je nu ook de plaats.

of)

a) met matrices zal het vast in 1 keer gaan (zaols MsAlters al zei: je neemt de inverse van de matrix die je gebruikt voor de wereld (ie rot+trans) en daar plonk je dan de sx-sy in. En hey presto de echte coord.

WORLD -> SCREEN (WS Matrix) == (4,4) [WS] = (3,14)[WS]^-1 = (4,4).

[WS]^-1 == de inverse van je matrix. (SCREEN->WORLD).
Pagina: 1