• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Multiplikation mit -1 ?

kampfkeks11

New member
Warum steht nach der Multiplikation in n <null value> statt 0?

var n = -1 * 0;
 
Zuletzt bearbeitet von einem Moderator:
Kannst du mal deinen kompletten Code posten? - Wenn ich das mache, bekomme ich -0 als Ergebnis raus...
 
Zuletzt bearbeitet:
So:

Code:
var n = -1 * 0;

Oder so:

Code:
function calculateRotX(matrix3D, dir) 
{
    var n11 = matrix3D.n11;  var n12 = matrix3D.n12;  var n13 = matrix3D.n13;  var n14 = matrix3D.n14;
    var n21 = matrix3D.n21;  var n22 = matrix3D.n22;  var n23 = matrix3D.n23;  var n24 = matrix3D.n24;
    var n31 = matrix3D.n31;  var n32 = matrix3D.n32;  var n33 = matrix3D.n33;  var n34 = matrix3D.n34;
  //var n41 = matrix3D.n41;  var n42 = matrix3D.n42;  var n43 = matrix3D.n43;  var n44 = matrix3D.n44;
    
    //matrix3D.n11 = n11;
    matrix3D.n12 = dir*n13;
    matrix3D.n13 = -1*dir*n12; //   <---  var n = -1 * 0;
    matrix3D.n14 = n14;
    
    //matrix3D.n21 = n21;
    matrix3D.n22 = dir*n23;
    matrix3D.n23 = -1*dir*n22;
    matrix3D.n24 = -1*dir*n34;
    
    //matrix3D.n31 = n31;
    matrix3D.n32 = dir*n33;
    matrix3D.n33 = -1*dir*n32;
    matrix3D.n34 = dir*n24;
    
    matrix3D.n41 = 0;
    matrix3D.n42 = 0;
    matrix3D.n43 = 0;
    matrix3D.n44 = 1;
}

n und matrix3D.n13 ist nach der Multiplikation auf <null value> gesetzt und ist nicht lesbar.
 
Bist du sicher, dass "dir" und "n12" Dezimalzahlen sind?
Welchen Browser verwendest du?
Was kommt weiter unten bei "matrix3D.n23" raus?
 
Bist du sicher, dass "dir" und "n12" Dezimalzahlen sind?
Welchen Browser verwendest du?
Was kommt weiter unten bei "matrix3D.n23" raus?

Ja, das sind Dezimalzahlen, denn die anderen Werte werden korrekt berechnet, nur wenn dieser Fall kommt dann nicht. Sehr komisch.

Ich benutze NetBeans IDE 8.0.1(HTML5 Project) und "NetBeans Connector" für Google Chrome fürs Debuggen.

Bei "matrix3D.n23" kommt auch <null value> raus, hast recht.
 
Nebenbei: es ist kürzer, die Variablen gleich alle auf einmal zu deklarieren:
Code:
//anstatt:
var n11 = matrix3D.n11;  var n12 = matrix3D.n12; //usw.

var n11 = matrix3D.n11, n12 = matrix3D.n12; //usw.

Ich finde es ohnehin unnötig, hier extra für jeden Wert eine Variable zu erstellen. matrix3D.n11 ist jetzt auch nicht viel umständlicher als n11...
 
Hmm, wirklich sehr seltsam. In meinem Chrome unter Linux kommt auch -0 raus.

Versuch mal die folgende Zeile so zu schreiben und dann mal noch via. console.log() dir und n12 zu loggen:
Code:
console.log(dir); // Was steht hier drin?
console.log(n12); // Was steht hier drin?
matrix3D.n13 = -1*(dir*n12);

- - - Aktualisiert - - -

@Julian: Es ist nicht nur kürzer, sondern auch Ressourcenschonender... (Hab ich mal irgendwo gelesen)
 
Nebenbei: es ist kürzer, die Variablen gleich alle auf einmal zu deklarieren:
Code:
//anstatt:
var n11 = matrix3D.n11;  var n12 = matrix3D.n12; //usw.

var n11 = matrix3D.n11, n12 = matrix3D.n12; //usw.

Das stimmt.

Ich finde es ohnehin unnötig, hier extra für jeden Wert eine Variable zu erstellen. matrix3D.n11 ist jetzt auch nicht viel umständlicher als n11...

Das muss aber sein, weil ich originalwerte brauche beim rechnen z.B n12 und n22. Nicht alle aber so muss ich mir erstmal keine Gedanken darüber machen.

Code:
console.log(dir); // --> 1
console.log(n12); // --> 0
matrix3D.n13 = -1*(dir*n12);
console.log(matrix3D.n13); // --> 0

Danke, das war die Lösung, warum auch immer.
So, der Tag hat sich gelohnt.
 
Sehr gut. Vermutlich ist durch die 3er Multiplikation irgendwas durcheinander geraten.
 
Nebenbei: es ist kürzer, die Variablen gleich alle auf einmal zu deklarieren
Kürzer, aber in meinen Augen gefährlicher, da aus einem Komma schnell mal ein Semikolon wird (v.A. wenn man für jede Variable eine neue Zeile macht, was viel übersichtlicher ist) und man dann eine globale Variable hat.
 
Zurück
Oben