Ik ben in c# bezig gegaan om een simple AI movement system te maken. Van alle objecten in de zo genaamde wereld heb ik all coördinaten (x,y,z). Voor de interactie van de objecten met elkaar dienen ze naar elkaar toe te bewegen. De bedoeling is dat ze een punt selecteren dat valk bij het andere object ligt. De manier die ik nu gebuik is het selecteren van het punt waar object A staat en dan 1 van de x aftrekken van die positie.
Deze methode is natuurlijk heel erg onnauwkeurig en heeft als gevolg dat de object soms door elkaar heen lopen. Om dit op te lossen heb ik wat op wikipedia gezocht omtrent geometrische wiskunde. Ik kwam uit op de functies van Sinus (sin) en Cosinus (cos).
Als oplossing kreeg ik deze code, alleen werkt hij nog steeds niet erg perfect in alle situaties (x,y en z zijn class variabele in de point class).
Ook komt het soms voor dat object van elkaar vandaan moeten bewegen. Hier voor heb ik nog geen goede oplossing gevonden. Ter illustratie heb ik maar even een plaatje gemaakt in photoshop. De groene punten zijn de punten die de methods getClosePoint en getFarPoint moeten uitrekenen.

Deze methode is natuurlijk heel erg onnauwkeurig en heeft als gevolg dat de object soms door elkaar heen lopen. Om dit op te lossen heb ik wat op wikipedia gezocht omtrent geometrische wiskunde. Ik kwam uit op de functies van Sinus (sin) en Cosinus (cos).
Als oplossing kreeg ik deze code, alleen werkt hij nog steeds niet erg perfect in alle situaties (x,y en z zijn class variabele in de point class).
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| public float getAngle(Point a) { float dx = a.x - x; float dy = a.y - y; float ang = (float)Math.Atan2(dy, dx); ang = (float)((ang >= 0) ? ang : 2 * Math.PI + ang); return ang; } public Point getClosePoint( Point a ) { double angle = (double)getAngle(a); return new Point(a.x + Math.Cos(angle), a.y + Math.Sin(angle), a.z); } |
Ook komt het soms voor dat object van elkaar vandaan moeten bewegen. Hier voor heb ik nog geen goede oplossing gevonden. Ter illustratie heb ik maar even een plaatje gemaakt in photoshop. De groene punten zijn de punten die de methods getClosePoint en getFarPoint moeten uitrekenen.

http://www.tweakers.net/gallery/119170/sys