Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

23.09.2011, 09:25

Winkel zwischen zwei Vektoren

Hi,

folgendes Problem: ich habe zwei Linien (bzw. die Vektoren aus diesen), welche sich in einem Punkt treffen. Jetzt würde ich gerne ermitteln, ob diese in irgend einem Winkel zueinander stehen oder nicht. Für 2D ist das noch halbwegs klar, allerdings habe ich jetzt 3D-Linien.

Prinzipiell wäre meine erste überlegung, dass diese - je nach Ansicht, bis zu zwei Winkel haben können, in denen sie zueinander stehen. Lustigerweise hat Java3D eine Funktion, die einen Winkel aus zwei 3D-Vektoren ermittelt. Ist ja auch irgend wie logisch, die Linien kann man ja so im Raum verdrehen, dass sie flach auf einer Ebene liegen - und schon ist es wieder ein 2D-Winkel.

Allerdings: wie komme ich an diesen Winkel, ohne erst irgend welche Verdrehungen ausführen zu müssen?

2

23.09.2011, 09:33

OK, hat sich erledigt - ich habs :-)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

23.09.2011, 10:23

Wofür brauchst du diesen Winkel? Meiner Erfahrung nach läuft man meistens grad in die völlig falsche Richtung, wenn man in 3D anfängt irgendwelche Winkel zu bestimmen.

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

4

23.09.2011, 10:39

Musste nur ich schmunzeln, dass dot mit seinem Namen die Frage quasi beantwortet hat? ;)

Fireball

Alter Hase

Beiträge: 415

Wohnort: Werne

Beruf: Dipl. Inf.

  • Private Nachricht senden

5

23.09.2011, 11:03

Hier die Lösung wie man das berechnet.

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

Also Skalar Produkt der Vektoren dividiert durch die Länge der Vektoren. :thumbsup:

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Fireball« (23.09.2011, 11:09)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

23.09.2011, 11:47

OK, hat sich erledigt - ich habs :-)

Das nächste Mal sei doch so nett und teile uns mit, wie du das Problem gelöst hast.
Dann haben alle etwas davon, vor allem diejenigen, die später bei der Suche auf diesen Beitrag stoßen :)

7

23.09.2011, 13:55

Wofür brauchst du diesen Winkel?


Datenreduktion. Wenn der Winkel zwischen drei Punkten kleiner als ein gewisser Wert ist, so verwerfe ich den mittleren Punkt, weil er für das Endergebnis keine Bedeutung hat. In dem Fall ist es so, dass die Ausgabe etwas "unscharf" ist und sehr kleine Winkel gar nicht wiedergeben könnte, also kann man sich die entsprechenden Daten auch sparen.

@Dave: Ich berechne das so:

C-/C++-Quelltext

1
2
3
4
5
   double calc;

   calc= thisVec->x*vec->x + thisVec->y*vec->y + thisVec->z*vec->z;
   calc /=(vector3d_length(thisVec)*vector3d_length(vec));
   return acos(calc);

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

23.09.2011, 14:04

Spar dir den acos, du brauchst nur das Punktprodukt direkt mit dem cos deines Grenzwinkels zu vergleichen ;)

Werbeanzeige