เมื่อได้รับ 4 คะแนนที่อธิบายถึง 2 ส่วนของเส้นคุณจะคำนวณได้อย่างไรว่าเส้น A ไปทางหรือออกจากบรรทัด B
เส้น 2 เส้นมีความยาวคงที่และสามารถวัดระยะทางจาก x1 / y1 ถึง x2 / y2
เมื่อได้รับ 4 คะแนนที่อธิบายถึง 2 ส่วนของเส้นคุณจะคำนวณได้อย่างไรว่าเส้น A ไปทางหรือออกจากบรรทัด B
เส้น 2 เส้นมีความยาวคงที่และสามารถวัดระยะทางจาก x1 / y1 ถึง x2 / y2
คำตอบ:
อนุญาตA
และB
เป็นสองจุดบนเส้นสีดำ ให้C
และD
เป็นส่วนสีน้ำเงินของคุณ เครื่องหมายของz
พิกัดของผลิตภัณฑ์ข้ามAB^AC
จะบอกคุณว่าC
"ซ้าย" หรือ "ขวา" ของเส้นสีดำ ผลิตภัณฑ์ Cross AB^CD
จะบอกคุณว่าตัวพาCD
"ซ้าย" หรือ "ขวา" ของเส้นสีดำ
เราไม่อยากรู้ว่ามันไปทางซ้ายหรือขวา; สิ่งที่เราต้องการคือทำให้แน่ใจว่าพวกมันอยู่ในทิศทางเดียวกันหรือในทิศทางตรงกันข้ามนั่นคือสาเหตุที่เราคูณค่าสองค่า
รหัสเทียมต่อไปนี้จึงควรใช้งานได้:
z1 = (xB-xA)*(yC-yA) - (yB-yA)*(xC-xA);
z2 = (xB-xA)*(yD-yC) - (yB-yA)*(xD-xC);
z3 = z1 * z2;
if (z3 < 0)
; /* Pointing towards (BUT maybe even crossing) */
else if (z3 > 0 || z2 != 0)
; /* Pointing away */
else
; /* Parallel */
ฉันเกรงว่าฉันต้องใช้เวลาพอสมควรในการเขียนวิธีแก้ปัญหาที่เหมาะสมสำหรับเส้นโค้ง Bezier สถานการณ์ต่อไปนี้เป็นไปหรือไปหรือไม่
สมมติว่าจุดเริ่มต้นคือวงกลมสีเขียวและจุดสิ้นสุดคือลูกศรสีแดง
คำนวณระยะห่างระหว่างจุดเริ่มต้นเป็น DS และส่วนสีดำและทำเช่นเดียวกันสำหรับจุดสิ้นสุด (ลูกศรสีแดง) เป็น DE ถ้า DS> DE แสดงว่าเซ็กเมนต์นั้นชี้ไปที่ ถ้า DE> DS มันจะชี้ไป หากทั้งสองเท่ากันทั้งสองจะเหมือนกัน
คุณสามารถค้นหาวิธีการคำนวณระยะทางจากจุดที่จะส่วนที่นี่และเส้นโค้งเบซิเยร์กำลังสองที่นี่ อย่างไรก็ตามขึ้นอยู่กับรูปร่างของเส้นโค้งเบซิเยร์มันอาจส่งคืนผลลัพธ์ที่แปลก (เส้นโค้งสามารถข้ามตัวเองได้)