Ich habe kürzlich erfahren, dass wir in unseren physikalischen Berechnungen häufig den Satz von Pythagoras verwenden, und ich fürchte, ich verstehe den Punkt nicht wirklich.
Hier ist ein Beispiel aus einem Buch , um sicherzustellen, dass ein Objekt nicht schneller als eine MAXIMUM_VELOCITY
Konstante in der horizontalen Ebene wandert:
MAXIMUM_VELOCITY = <any number>;
SQUARED_MAXIMUM_VELOCITY = MAXIMUM_VELOCITY * MAXIMUM_VELOCITY;
function animate(){
var squared_horizontal_velocity = (x_velocity * x_velocity) + (z_velocity * z_velocity);
if( squared_horizontal_velocity <= SQUARED_MAXIMUM_VELOCITY ){
scalar = squared_horizontal_velocity / SQUARED_MAXIMUM_VELOCITY;
x_velocity = x_velocity / scalar;
z_velocity = x_velocity / scalar;
}
}
Versuchen wir das mit ein paar Zahlen:
Ein Objekt versucht, 5 Einheiten in x und 5 Einheiten in z zu verschieben. Es sollten sich insgesamt nur 5 Einheiten horizontal bewegen lassen!
MAXIMUM_VELOCITY = 5;
SQUARED_MAXIMUM_VELOCITY = 5 * 5;
SQUARED_MAXIMUM_VELOCITY = 25;
function animate(){
var x_velocity = 5;
var z_velocity = 5;
var squared_horizontal_velocity = (x_velocity * x_velocity) + (z_velocity * z_velocity);
var squared_horizontal_velocity = 5 * 5 + 5 * 5;
var squared_horizontal_velocity = 25 + 25;
var squared_horizontal_velocity = 50;
// if( squared_horizontal_velocity <= SQUARED_MAXIMUM_VELOCITY ){
if( 50 <= 25 ){
scalar = squared_horizontal_velocity / SQUARED_MAXIMUM_VELOCITY;
scalar = 50 / 25;
scalar = 2.0;
x_velocity = x_velocity / scalar;
x_velocity = 5 / 2.0;
x_velocity = 2.5;
z_velocity = z_velocity / scalar;
z_velocity = 5 / 2.0;
z_velocity = 2.5;
// new_horizontal_velocity = x_velocity + z_velocity
// new_horizontal_velocity = 2.5 + 2.5
// new_horizontal_velocity = 5
}
}
Das funktioniert jetzt gut, aber wir können dasselbe auch ohne Pythagoras machen:
MAXIMUM_VELOCITY = 5;
function animate(){
var x_velocity = 5;
var z_velocity = 5;
var horizontal_velocity = x_velocity + z_velocity;
var horizontal_velocity = 5 + 5;
var horizontal_velocity = 10;
// if( horizontal_velocity >= MAXIMUM_VELOCITY ){
if( 10 >= 5 ){
scalar = horizontal_velocity / MAXIMUM_VELOCITY;
scalar = 10 / 5;
scalar = 2.0;
x_velocity = x_velocity / scalar;
x_velocity = 5 / 2.0;
x_velocity = 2.5;
z_velocity = z_velocity / scalar;
z_velocity = 5 / 2.0;
z_velocity = 2.5;
// new_horizontal_velocity = x_velocity + z_velocity
// new_horizontal_velocity = 2.5 + 2.5
// new_horizontal_velocity = 5
}
}
Vorteile ohne Pythagoras:
- Weniger Zeilen
- Innerhalb dieser Zeilen ist es einfacher zu lesen, was los ist
- ... und die Berechnung nimmt weniger Zeit in Anspruch, da es weniger Multiplikationen gibt
Mir kommt es so vor, als würden Computer und Menschen ohne den Satz von Pythagoras ein besseres Geschäft machen! Ich bin mir jedoch sicher, dass ich mich geirrt habe, da ich den Satz von Pythagoras an einer Reihe angesehener Orte gesehen habe. Deshalb möchte ich, dass mir jemand erklärt, welchen Vorteil es hat, den Satz von Pythagoras bei einem Mathematik- Neuling anzuwenden .
Hat dies etwas mit Einheitsvektoren zu tun? Für mich ist ein Einheitsvektor, wenn wir einen Vektor normalisieren und ihn in einen Bruchteil umwandeln. Wir tun dies, indem wir den Vektor durch eine größere Konstante teilen. Ich bin mir nicht sicher, welche Konstante es ist. Die Gesamtgröße des Graphen? Wie auch immer, da es sich um einen Bruch handelt, ist ein Einheitsvektor im Grunde genommen ein Graph, der in ein 3D-Gitter passen kann, wobei die x-Achse von -1 nach 1, die z-Achse von -1 nach 1 und die y-Achse verlaufen -Achse läuft von -1 bis 1. Das ist buchstäblich alles, was ich über Einheitsvektoren weiß ... nicht viel: P Und ich verstehe ihre Nützlichkeit nicht.
Außerdem erstellen wir in den obigen Beispielen keinen Einheitsvektor. Soll ich den Skalar so bestimmen:
// a mathematical work-around of my own invention. There may be a cleverer way to do this! I've also made up my own terms such as 'divisive_scalar' so don't bother googling
var divisive_scalar = (squared_horizontal_velocity / SQUARED_MAXIMUM_VELOCITY);
var divisive_scalar = ( 50 / 25 );
var divisive_scalar = 2;
var multiplicative_scalar = (divisive_scalar / (2*divisive_scalar));
var multiplicative_scalar = (2 / (2*2));
var multiplicative_scalar = (2 / 4);
var multiplicative_scalar = 0.5;
x_velocity = x_velocity * multiplicative_scalar
x_velocity = 5 * 0.5
x_velocity = 2.5
Ich kann wieder nicht verstehen, warum dies besser ist, aber es ist mehr "Einheitsvektor-y", weil der multiplikative_Skalar ein Einheitsvektor ist. Wie Sie sehen können, verwende ich Wörter wie "unit-vector-y", also bin ich wirklich kein Mathematik-Zauberer! Beachten Sie auch, dass Einheitsvektoren möglicherweise nichts mit dem Satz von Pythagoras zu tun haben. Ignorieren Sie all dies, wenn ich den falschen Baum anklopfe.
Ich bin eine sehr visuelle Person (3D-Modellbauer und Konzeptkünstler von Beruf!) Und ich finde Diagramme und Grafiken wirklich sehr, sehr hilfreich, so viele wie nur irgend möglich, bitte!
sqrt(2.5*2.5 + 2.5*2.5)
(2.5, 2.5)
hat eine Größe von etwa 3,54, nicht 5.