Du bist nicht angemeldet.

Werbeanzeige

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

1

02.12.2011, 20:27

Absatnd zwischen 2 Punkten

Hallo
Mein Problem ist folgendes: Ich habe eine Position(Player) und die Blickrichtung als Vektor vorliegen. Zusätzlich noch eine Position eines beliebigen Objektes.
Mein Problem besteht nun darin, den Abstand zw. Player und dem Objekt auszurechnen. Dies soll allerdings nur geschehen, wenn der Spieler auch in Richtung des Objektes guckt.
Also nochmal für's verständnis ;) : 2 Punkte und eine Blickrichtung ( Richtungsvektor ). Abstand zw. den 2 Punkten ausrechnen, aber nur wenn die Blickrichtung auf das Objekt zeigt.
Ich habe mir gedacht das ich dort mit dem Phytagoras weiter komme. So hatte ich auch mal eine Sehr einfache KI geschrieben. Allerdings weiß ich nicht wie ich das mit der Blickrichtung lösen könnte.
Danke vorerst ;)
MfG
PS. Natürlich im 3D Raum ;)

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veralteten strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Fluaflubfluc

unregistriert

2

02.12.2011, 21:37

Wenn ich dich richtig verstehe, moechtest du pruefen, ob Gamer zu dem Objekt guckt. Ich bin mir nicht sicher, aber versuche das doch mal so:
Erstmal die Entfernung der Objekte ausrechnen, dann hast zum Beispiel: (4,2) in deinem Vektor. Dass heisst, dass das Objekt 4 x und 2 y entfernt ist. Nun rechnest du tan(4/2) oder tan(2/4) und dann hast du den Winkel in den der Spieler gucken muss. Ich hatte dieses Thema in der Schule noch nicht. ;) Den Winkel speicherst du dann in einer Variable. Dann kannst du pruefen, ob der Winkel in den der Spieler guckt uebereinstimmt. In 3D musst du nur noch eine neue Achse machen. Ich kann dir nicht versprechen, dass es funktioniert, denn hier in diesen Forum hassen die Leute mit Winkeln zu arbeiten.

C-/C++-Quelltext

1
2
3
4
5
6
7
float FindAngle (tbVector2 a,tbVector2 b){
tbVector2 c = a - b;
c.x = abs(c.x) // Die Zahlen positiv machen
c.y = abs(c.y)

return d = tan(c.x/c.y);
}


Ich bin mir aber nicht 100% Sicher ob das funktioniert!

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Fluaflubfluc« (03.12.2011, 12:14)


Powerpaule

Treue Seele

Beiträge: 162

Wohnort: Berlin

Beruf: Softwareentwickler

  • Private Nachricht senden

3

02.12.2011, 21:44

Stichwort: Skalarprodukt. Damit geht es im Grunde total easy.
Du berechnest den Richtungsvektor zwischen dem Spieler und dem Objekt (PositionA - PositionB), und berechnest dann mit Hilfe des Skalarprodukts den Winkel zwischen den beiden Vektoren. Das sollte ja dann ausreichen um zu gucken ob die Blickrichtung passt, bspw. wenn der Winkel zwischen -15 und 15 Grad beträgt, und das mit dem Abstand hast du quasi ja schon ; )

http://www.mathe-online.at/materialien/A…er_vektoren.htm

Edit: Das von Fluaflubfluc ist gar nicht so falsch, bringt allerdings im 3D-Raum nix ; )

Fluaflubfluc

unregistriert

4

02.12.2011, 21:53

Ich konnte meine Formel ja auch in 2D Spielen anwenden. Habe sie aber noch nie in 3D Spielen angewendet, sodass ich auch nicht weiss, ob sie dort funktioniert. ;)

BlueCobold

Community-Fossil

Beiträge: 10 859

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

02.12.2011, 22:33

Sag mal, Fluaflubfluc, Du weißt aber, was ein Produkt eigentlich ist, oder? Ich schätze mal, Du meintest wohl eher den "Absolutwert".
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Fluaflubfluc

unregistriert

6

03.12.2011, 12:12

Oh, muss mich mohl verschrieben haben. Ich berichtige es mal schnell

FSA

Community-Fossil

  • »FSA« ist der Autor dieses Themas
  • Private Nachricht senden

7

04.12.2011, 11:34

Danke @ all ;)
Ich werde jetzt etwas rumprobieren und mich nochmal melden.
MfG

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veralteten strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Werbeanzeige