8
การปะทะกันของลูกบิลเลียด
ได้รับตำแหน่ง 2 มิติและความเร็วของคู่ของลูกบิลเลียดขวาก่อนส่งผลกระทบต่อการคำนวณความเร็วของพวกเขาหลังจากที่ดีที่สุดที่ยืดหยุ่นขัดแย้ง ลูกบอลถูกสันนิษฐานว่าเป็นทรงกลมในอุดมคติ (หรือเทียบเท่า: วงกลม) ที่มีรัศมีเดียวกันมวลเดียวกันความหนาแน่นสม่ำเสมอและไม่มีแรงเสียดทาน ข้อมูลที่ป้อนประกอบด้วยตัวเลข 8 ตัวp0x,p0y,v0x,v0y,p1x,p1y,v1x,v1yโดยที่p0x,p0yจุดศูนย์กลางของลูกบอลลูกแรกv0x,v0yความเร็วของมันและคล้ายp1x,p1y,v1x,v1yกับลูกที่สอง คุณสามารถยอมรับการป้อนข้อมูลในลำดับใด ๆ และโครงสร้างในวิธีที่สะดวกใด ๆ เช่นเป็น array 2x2x2 หรืออาจจะอาร์เรย์ 2x2 สำหรับpสองยาว 2 อาร์เรย์สำหรับและv0 v1การใช้ตัวเลขที่ซับซ้อน (หากภาษาของคุณรองรับพวกเขา) แทนที่จะเป็นคู่ xy อย่างไรก็ตามคุณไม่ควรป้อนข้อมูลในระบบพิกัดอื่นนอกเหนือจากคาร์ทีเซียนเช่นไม่อนุญาตให้ใช้ขั้ว โปรดทราบว่ารัศมีของลูกบิลเลียดนั้นอยู่ห่างจากครึ่งหนึ่งของระยะระหว่างp0x,p0yและp1x,p1yดังนั้นจึงไม่ได้ถูกกำหนดให้เป็นส่วนหนึ่งของอินพุตอย่างชัดเจน เขียนโปรแกรมหรือฟังก์ชั่นที่ผลหรือผลตอบแทนที่ 4 ตัวเลขในการเป็นตัวแทนคาร์ทีเซียนที่สะดวก: v0x,v0y,v1x,v1yค่าหลังการปะทะกันของ อัลกอริทึมที่เป็นไปได้คือ: ค้นหาบรรทัดปกติที่ผ่านทั้งสองศูนย์ ค้นหาเส้นสัมผัสที่ผ่านจุดกึ่งกลางระหว่างจุดศูนย์กลางสองจุดและตั้งฉากกับเส้นปกติ เปลี่ยนระบบพิกัดและแยกย่อยv0x,v0yและv1x,v1yเป็นองค์ประกอบวงv0t,v0nและปกติv1t,v1n สลับส่วนประกอบปกติของv0และv1รักษาองค์ประกอบวงใน เปลี่ยนกลับเป็นระบบพิกัดเดิม การทดสอบ (ผลลัพธ์ถูกปัดเศษเป็นทศนิยม 5 ตำแหน่ง): p0x p0y v0x v0y p1x p1y v1x v1y …