Norm Methode

Vektoria Forum Norm Methode

Dieses Thema enthält 1 Antwort und 2 Teilnehmer. Es wurde zuletzt aktualisiert von  Tobias Breiner 5. Juli 2019 - 10:01.

Ansicht von 2 Beiträgen - 1 bis 2 (von insgesamt 2)
  • Autor
    Beiträge
  • #2296 Antwort

    Tobias Breiner
    Keymaster

    Hi,

    das ist kein Bug, sondern ein häufig auftretendes Verständnisproblem:

    Es handelt sich ja nicht um einen x,y,z-Vektor, sondern um einen homogenen Vektor mit 4 Tupeln: (x,y,z,w).

    Der Konstruktor erzeugt standardmäßig dabei einen homogenen Punktvektor mit w=1. Wir haben nach Aufruf des Konstruktors also nicht (-1,-2, 0), sondern (-1,-2, 0, 1)!

    Zur Erinnerung: Richtungen sind bei homogenen Vektoren durch einen w-Tupel = 0 gekennzeichnet, Punkte durch einen w-Tupel != 0, vorzugsweise 1.

    Für die Längenberechnung wird aber der w-Faktor naturgemäß nicht mitberechnet, sondern nur sqrt(x*x+y*y+z*z),
    in diesem Falle kommt da bei Length sqrt(5) = 2.23606801 raus, passt also! 🙂

    Die Methode CHVector::Norm() berücksichtigt bei der Normierung auch den w-Tupel. Es handelt sich also um eine homogene Normierung, in der alle Tupel dann durch sqrt(6) geteilt werden. Der Gesamtbetrag des Vektors ist zwar danach eins, die Länge des Vektor ist aber 0.912870884, da Length ja den w-Tupel nicht mitberücksichtigen darf. Passt also auch! 🙂

    Was du vermultlich anwenden wolltest, ist nicht die Methode CHVector::Norm(), sondern die Methode CHVector::Normal(), diese setzt den w-Tupel auf 0 und berechnet erst danach die Länge, also:

    CHVector temp3vector(-1, -2, 0);
    length1 = temp3vector.Length(); //= 2.23606801
    temp3vector.Normal();
    length1 = temp3vector.Length(); //= 1.00000000

    Falls du danach aus temp3vector wieder einen Punktvektor machen willst, und keinen Richtungsvektor, solltest du danach noch die Methode CHVector::MakePoint(); aufrufen!

    Ich hoffe, ich konnte dir helfen!
    Viele Grüße
    Tobi

    #2270 Antwort

    San Holo

    Hallo,

    Ich habe den Eindruck, dass die Norm() Methode den Vektor nicht korrekt normiert.

    CHVector temp3vector(-1, -2, 0);
    length1 = temp3vector.Length(); //= 2.23606801
    temp3vector.Norm();
    length1 = temp3vector.Length(); //= 0.912870884

    Ciao!

Ansicht von 2 Beiträgen - 1 bis 2 (von insgesamt 2)
Antwort auf: Norm Methode
Deine Information: