Recentemente, aprendi que usamos muito o teorema de Pitágoras em nossos cálculos de física e receio que não entendi direito.
Aqui está um exemplo de um livro para garantir que um objeto não viaje mais rápido que uma MAXIMUM_VELOCITY
constante no 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;
}
}
Vamos tentar isso com alguns números:
Um objeto está tentando mover 5 unidades em xe 5 unidades em z. Só deve poder mover 5 unidades horizontalmente no 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
}
}
Agora isso funciona bem, mas podemos fazer a mesma coisa sem 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
}
}
Benefícios de fazer isso sem Pitágoras:
- Menos linhas
- Dentro dessas linhas, é mais fácil ler o que está acontecendo
- ... e leva menos tempo para calcular, pois há menos multiplicações
Parece-me que computadores e humanos conseguem um acordo melhor sem o teorema de Pitágoras! No entanto, tenho certeza que estou errado, pois já vi o teorema de Pitágoras em vários lugares respeitáveis, então gostaria que alguém me explicasse o benefício de usar o teorema de Pitágoras para um novato em matemática .
Isso tem algo a ver com vetores unitários? Para mim, um vetor unitário é quando normalizamos um vetor e o transformamos em uma fração. Fazemos isso dividindo o vetor por uma constante maior. Não tenho certeza do quão constante é. O tamanho total do gráfico? De qualquer forma, por ser uma fração, um vetor unitário é basicamente um gráfico que pode caber dentro de uma grade 3D com o eixo x rodando de -1 a 1, o eixo z rodando de -1 a 1 ey - eixo varia de -1 a 1. Isso é literalmente tudo o que sei sobre vetores unitários ... não muito: P E não vejo a utilidade deles.
Além disso, não estamos realmente criando um vetor de unidade nos exemplos acima. Devo determinar o escalar como este:
// 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
Novamente, não consigo entender por que isso é melhor, mas é mais "vetor-unidade-y" porque o multiplicative_scalar é um vetor de unidade? Como você pode ver, eu uso palavras como "unit-vector-y", então não sou realmente um gênio da matemática! Também ciente de que os vetores unitários podem não ter nada a ver com o teorema de Pitágoras, então ignore tudo isso se eu estiver latindo na árvore errada.
Eu sou uma pessoa muito visual (modelador 3D e artista conceitual por profissão!) E acho que diagramas e gráficos são realmente muito úteis para tantos humanamente quanto possível, por favor!
sqrt(2.5*2.5 + 2.5*2.5)
(2.5, 2.5)
tem uma magnitude de aproximadamente 3,54, não 5.