나는 최근에 우리가 물리 계산에서 피타고라스 정리를 많이 사용한다는 것을 배웠으며 실제로 포인트를 얻지 못할 것으로 두려워합니다.
다음 은 수평면에서 물체가 일정 보다 빠르게 이동하지 않도록 하는 책 의 예입니다 MAXIMUM_VELOCITY
.
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;
}
}
몇 가지 숫자로 시도해 봅시다.
개체가 x 단위로 5 단위, z 단위로 5 단위를 이동하려고합니다. 총 5 대만 수평으로 움직일 수 있어야합니다!
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
}
}
이제는 잘 작동하지만 피타고라스없이 동일한 작업을 수행 할 수 있습니다.
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
}
}
피타고라스없이 그것을 할 때의 이점 :
- 적은 줄
- 그 줄 안에서 무슨 일이 일어나고 있는지 더 쉽게 읽을 수 있습니다
- ... 곱셈이 적기 때문에 계산 시간이 덜 걸립니다.
피타고라스 정리가 없으면 컴퓨터와 인간이 더 나은 거래를하는 것처럼 보입니다! 그러나 여러 유명한 곳에서 피타고라스의 정리를 보았을 때 내가 틀렸다고 확신하므로 피타고라스 정리를 수학 초보자 에게 사용하는 이점을 누군가에게 설명하고 싶습니다 .
이것이 단위 벡터와 관련이 있습니까? 나에게 단위 벡터는 벡터를 정규화하고 분수로 바꿀 때입니다. 벡터를 더 큰 상수로 나누면됩니다. 그것이 얼마나 일정한지 잘 모르겠습니다. 그래프의 총 크기는? 어쨌든, 분수이기 때문에 단위 벡터는 기본적으로 x 축이 -1에서 1까지, z 축이 -1에서 1까지, y가 3D 그리드 안에 들어갈 수있는 그래프입니다. 축은 -1에서 1까지입니다. 그것은 문자 그대로 단위 벡터에 대해 아는 모든 것입니다.
또한 위의 예제에서 실제로 단위 벡터를 생성하지는 않습니다. 다음과 같이 스칼라를 결정해야합니까?
// 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
다시 말하지만, 이것이 왜 더 좋은지 알 수 없지만 multiplicative_scalar가 unit_vector이기 때문에 더 "unit-vector-y"입니까? 보시다시피, 나는 "unit-vector-y"와 같은 단어를 사용하므로 수학은 아닙니다! 또한 단위 벡터는 피타고라스 정리와 아무 관련이 없으므로 잘못된 트리를 짖는 경우이 모든 것을 무시하십시오.
저는 매우 시각적 인 사람입니다 (무역의 3D 모델러이자 컨셉 아티스트입니다!). 도표와 그래프가 정말 인도적으로 가능한 많은 사람들에게 도움이 될 것입니다.
sqrt(2.5*2.5 + 2.5*2.5)
(2.5, 2.5)
의 크기는