Recientemente aprendí que usamos mucho el teorema de Pitágoras en nuestros cálculos de física y me temo que realmente no entiendo el punto.
Aquí hay un ejemplo de un libro para asegurarse de que un objeto no viaje más rápido que una MAXIMUM_VELOCITY
constante en el plano 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;
}
}
Probemos esto con algunos números:
Un objeto está intentando mover 5 unidades en xy 5 unidades en z. ¡Solo debería poder mover 5 unidades horizontalmente en 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
}
}
Ahora esto funciona bien, pero podemos hacer lo mismo sin Pitágoras:
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
}
}
Beneficios de hacerlo sin Pitágoras:
- Menos líneas
- Dentro de esas líneas, es más fácil leer lo que está sucediendo.
- ... y toma menos tiempo calcular, ya que hay menos multiplicaciones
¡Me parece que las computadoras y los humanos obtienen un mejor trato sin el teorema de Pitágoras! Sin embargo, estoy seguro de que estoy equivocado, ya que he visto el teorema de Pitágoras en varios lugares de buena reputación, así que me gustaría que alguien me explique el beneficio de usar el teorema de Pitágoras a un novato en matemáticas .
¿Tiene esto algo que ver con los vectores unitarios? Para mí, un vector unitario es cuando normalizamos un vector y lo convertimos en una fracción. Hacemos esto dividiendo el vector por una constante más grande. No estoy seguro de qué constante es. El tamaño total de la gráfica? De todos modos, como es una fracción, supongo que un vector unitario es básicamente un gráfico que puede caber dentro de una cuadrícula 3D con el eje x que va de -1 a 1, el eje z que va de -1 a 1 y la y -eje que va de -1 a 1. Eso es literalmente todo lo que sé sobre los vectores unitarios ... no mucho: P Y no veo su utilidad.
Además, en realidad no estamos creando un vector unitario en los ejemplos anteriores. ¿Debo determinar el escalar así?
// 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
Una vez más, no puedo ver por qué esto es mejor, pero es más "unit-vector-y" porque multiplicative_scalar es unit_vector. Como puede ver, uso palabras como "unit-vector-y", ¡así que realmente no soy un genio de las matemáticas! También consciente de que los vectores unitarios podrían no tener nada que ver con el teorema de Pitágoras, así que ignore todo esto si estoy ladrando el árbol equivocado.
Soy una persona muy visual (¡modelista 3D y artista conceptual por profesión!) Y encuentro diagramas y gráficos realmente, muy útiles, ¡por favor, tantos como sea humanamente posible!
sqrt(2.5*2.5 + 2.5*2.5)
(2.5, 2.5)
tiene una magnitud de aproximadamente 3.54, no 5.