J'ai récemment appris que nous utilisons beaucoup le théorème de Pythagore dans nos calculs de physique et j'ai bien peur de ne pas vraiment comprendre.
Voici un exemple tiré d' un livre pour s'assurer qu'un objet ne se déplace pas plus rapidement qu'une MAXIMUM_VELOCITY
constante dans le plan horizontal:
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;
}
}
Essayons cela avec quelques chiffres:
Un objet tente de déplacer 5 unités sur x et 5 unités sur z. Il ne devrait être possible de déplacer que 5 unités horizontalement au total!
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
}
}
Maintenant, cela fonctionne bien, mais nous pouvons faire la même chose sans Pythagore:
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
}
}
Avantages de le faire sans Pythagore:
- Moins de lignes
- Dans ces lignes, il est plus facile de lire ce qui se passe
- ... et cela prend moins de temps à calculer, car il y a moins de multiplications
Il me semble que les ordinateurs et les humains obtiennent une meilleure offre sans le théorème de Pythagore! Cependant, je suis sûr de me tromper car j'ai vu le théorème de Pythagore dans un certain nombre d'endroits réputés. J'aimerais donc que quelqu'un m'explique les avantages de l'utilisation du théorème de Pythagore à un débutant en mathématiques .
Cela at-il quelque chose à voir avec les vecteurs unitaires? Pour moi, un vecteur unitaire consiste à normaliser un vecteur et à le transformer en une fraction. Nous faisons cela en divisant le vecteur par une constante plus grande. Je ne suis pas sûr de ce que c'est constant. La taille totale du graphique? Quoi qu'il en soit, comme il s'agit d'une fraction, je suppose, un vecteur unitaire est fondamentalement un graphique pouvant s'intégrer dans une grille 3D avec l'axe des abscisses allant de -1 à 1, l'axe des z allant de -1 à 1, et le y -axis allant de -1 à 1. C'est littéralement tout ce que je sais sur les vecteurs unitaires ... pas grand chose: P Et je ne vois pas leur utilité.
En outre, nous ne créons pas vraiment de vecteur unitaire dans les exemples ci-dessus. Devrais-je déterminer le scalaire comme ceci:
// 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
Encore une fois, je ne vois pas pourquoi c'est mieux, mais c'est plus "unit-vector-y" parce que multiplicative_scalar est un unit_vector? Comme vous pouvez le constater, j’utilise des mots tels que "unité-vecteur-y", ce qui fait que je ne suis vraiment pas un génie des maths! Sachez également que les vecteurs unitaires n’ont peut-être rien à voir avec le théorème de Pythagore, alors ignorez tout cela si je me trompe d’arbre.
Je suis une personne très visuelle (modeleur 3D et concepteur artistique par métier!) Et je trouve les diagrammes et les graphiques vraiment utiles, afin qu'ils soient aussi nombreux que possible humainement!
sqrt(2.5*2.5 + 2.5*2.5)
(2.5, 2.5)
a une magnitude d'environ 3,54 et non de 5.