ฉันเพิ่งเรียนรู้ว่าเราใช้ทฤษฎีบทพีทาโกรัสมากในการคำนวณทางฟิสิกส์ของเราและฉันเกรงว่าฉันจะไม่เข้าใจ
นี่คือตัวอย่างจากหนังสือเพื่อให้แน่ใจว่าวัตถุไม่เคลื่อนที่เร็วกว่า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;
}
}
ลองทำสิ่งนี้กับตัวเลข:
วัตถุพยายามย้าย 5 หน่วยใน x และ 5 หน่วยใน z มันควรจะสามารถเคลื่อนที่ได้ 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
}
}
ตอนนี้ใช้งานได้ดี แต่เราสามารถทำสิ่งเดียวกันได้โดยไม่ต้อง Pythagoras:
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
}
}
ประโยชน์ของการทำโดยไม่ใช้ Pythagoras:
- เส้นหัก
- ภายในบรรทัดเหล่านั้นจะง่ายต่อการอ่านสิ่งที่เกิดขึ้น
- ... และใช้เวลาในการคำนวณน้อยลงเนื่องจากมีการคูณที่น้อยลง
ดูเหมือนว่าฉันชอบคอมพิวเตอร์และมนุษย์ได้รับข้อตกลงที่ดีกว่าโดยไม่มีทฤษฎีบทพีทาโกรัส! แต่ฉันแน่ใจว่าฉันผิดที่ผมเคยเห็นทฤษฎีบทพีทาโกรัสในหลายสถานที่ที่มีชื่อเสียงดังนั้นฉันต้องการใครสักคนที่จะอธิบายให้ฉันประโยชน์ของการใช้พีทาโกรัสทฤษฎีบทกับคณิตศาสตร์มือใหม่
สิ่งนี้เกี่ยวข้องกับเวกเตอร์หน่วยหรือไม่ สำหรับฉันเวกเตอร์หน่วยคือเมื่อเราทำให้เวกเตอร์เป็นมาตรฐานและทำให้เป็นเศษส่วน เราทำได้โดยการหารเวกเตอร์ด้วยค่าคงที่ที่มากขึ้น ฉันไม่แน่ใจว่ามันคงที่ ขนาดทั้งหมดของกราฟ? อย่างไรก็ตามเพราะมันเป็นเศษส่วนผมก็เอาเวกเตอร์หน่วยมาเป็นกราฟที่สามารถใส่เข้าไปในกริด 3 มิติโดยที่แกน x วิ่งจาก -1 ถึง 1, แกน z วิ่งจาก -1 ถึง 1 และ y -axis วิ่งจาก -1 ถึง 1 นั่นคือทุกสิ่งที่ฉันรู้เกี่ยวกับเวกเตอร์หน่วย ... ไม่มาก: P และฉันไม่เห็นประโยชน์ของมัน
นอกจากนี้เราไม่ได้สร้างเวกเตอร์หน่วยในตัวอย่างข้างต้น ฉันควรจะกำหนดสเกลาร์แบบนี้:
// 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
อีกครั้งฉันไม่สามารถเห็นได้ว่าทำไมถึงดีกว่านี้ แต่มันคือ "unit-vector-y" มากกว่าเพราะ multiplicative_scalar เป็น unit_vector อย่างที่คุณเห็นฉันใช้คำเช่น "unit-vector-y" ดังนั้นฉันจึงไม่ใช่นักคณิตศาสตร์ โปรดทราบด้วยว่าเวกเตอร์หน่วยอาจไม่มีส่วนเกี่ยวข้องกับทฤษฎีบทพีทาโกรัสดังนั้นอย่าสนใจทั้งหมดนี้ถ้าฉันเห่าต้นไม้ผิดไป
ฉันเป็นคนที่มองเห็นได้ (ผู้สร้างภาพสามมิติและศิลปินแนวความคิดโดยการแลกเปลี่ยน!) และฉันพบว่าไดอะแกรมและกราฟจริงๆมีประโยชน์มากจริงๆ
sqrt(2.5*2.5 + 2.5*2.5)
(2.5, 2.5)
มีขนาดประมาณ 3.54 ไม่ใช่ 5