ฉันจะทดสอบว่าจุดหนึ่งอยู่ระหว่างเส้นขนานสองเส้นได้อย่างไร


10

ในเกมที่ฉันกำลังออกแบบมีการระเบิดที่ยิงออกมาจากจุดกำเนิดไปยังทิศทางของเมาส์ ความกว้างของการระเบิดนี้จะเท่ากันเสมอ

ที่ด้านล่างของหน้าจอ (ปัจจุบันคืออะไร) กำลังเคลื่อนไหวซึ่งควรได้รับผลกระทบจากการระเบิดที่ผู้เล่นควบคุม

ขณะนี้ฉันกำลังพยายามหาวิธีที่จะค้นหาว่ามุมของช่องสี่เหลี่ยมเหล่านี้อยู่ในขอบเขตสองเส้นของการระเบิดหรือไม่ ฉันคิดว่าวิธีที่ดีที่สุดในการทำเช่นนี้คือหมุนมุมของสี่เหลี่ยมรอบ ๆ จุดกำเนิดราวกับว่าการระเบิดนั้นเป็นแนวนอนสนิทและดูว่าค่า Y ของมุมนั้นน้อยกว่าหรือเท่ากับความกว้างของการระเบิดที่จะ หมายความว่าพวกเขาอยู่ในภูมิภาคที่ได้รับผลกระทบ แต่ฉันไม่สามารถทำงานได้


สิ่งนี้มีประโยชน์สำหรับฉัน: stackoverflow.com/a/3461533/1599699
Andrew

คำตอบ:


11

จุดอยู่ระหว่างเส้นขนาน 2 เส้นหากเป็นด้านหนึ่งของเส้นหนึ่งและอีกด้านหนึ่งของอีกเส้นหนึ่ง (หากจุดนั้นอยู่ในทิศทางเดียวกัน)

คุณสามารถใช้คำตอบที่ดีที่สุดจากคำถามนี้ที่ stackoverflow เพื่อกำหนดว่าด้านใดของบรรทัด (กำหนดโดย 2 จุดบน) จุดที่อยู่


อีกวิธีหนึ่งคือการคำนวณระยะทางจากจุดหนึ่งไปยังอีกเส้นกลางและเปรียบเทียบความหนาครึ่งกับการระเบิดของคุณ


2

นี่คือวิธีที่ฉันทำ (ด้วยการตรวจสอบเพิ่มเติมว่าเครื่องบินที่ให้มานั้นขนานกันจริงหรือไม่วัตถุ Plane มีสมการเครื่องบินในรูปแบบนี้: Ax + By + Cz + D = 0 ซึ่งคุณสามารถสร้างได้อย่างง่ายดายจาก 3 คะแนนหรือจากจุดและปกติ (ดูหน้านี้หากคุณไม่แน่ใจเกี่ยวกับคณิตศาสตร์: http://paulbourke.net/geometry/pointlineplane/ )

bool isPointBetweenParallelPlanes(const vec3 point, const Plane a, const Plane b){
// test if planes are parallel
vec3 cross = a.normal CROSS b.normal;
assert((a.normal CROSS b.normal) == vec3(0,0,0) && "These planes should be parallel.");
return ((a.normal DOT point) + a.D) * ((b.normal DOT point) + b.D) < 0.0;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.