ฟิสิกส์ของเกมที่สมบูรณ์แบบ แม่นยำไม่สิ้นสุดใน Python (ตอนที่ 2)
นี่คือบทความที่สองจากทั้งหมดสี่บทความที่แสดงให้คุณเห็นถึงวิธีการตั้งโปรแกรมเครื่องมือทางฟิสิกส์ที่สมบูรณ์แบบใน Python เป็นก้าวเล็กๆ ในความทะเยอทะยานอันยิ่งใหญ่ของฉันที่จะเปลี่ยนฟิสิกส์ คณิตศาสตร์ และแม้แต่ปรัชญาทั้งหมดให้เป็นการเขียนโปรแกรม เราจะค้นพบเรื่องน่าประหลาดใจ เพิ่มความเข้าใจ และ (ฉันหวังว่า) จะสนุกผ่านโครงการนี้ รหัสทั้งหมดมี อยู่ใน GitHub
ในตอนที่ 1เราได้พัฒนากลไกทางฟิสิกส์ที่สมบูรณ์แบบในระดับสูงสุด จากนั้นเราก็นำไปใช้กับ Newton's Cradle วงกลมที่มีรูปสามเหลี่ยม และลูกเทนนิสกับลูกบาสเก็ตบอล
ในส่วนที่ 2 เราจะใช้เครื่องยนต์กับบางสิ่งที่ซับซ้อนมากขึ้น: การพังบิลเลียด (เมื่อฉันเห็นผลลัพธ์ พวกเขาเปลี่ยนความเข้าใจทางปรัชญาของฉันเกี่ยวกับโลก)
ลองนึกภาพลูกคิวบอลกระจายเป็นรูปสามเหลี่ยมของลูกบิลเลียด ถ้า — หลังจากพักนิดหน่อย — คุณสามารถกลับทิศทางของบอลทุกลูกได้ พวกเขาจะสร้างสามเหลี่ยมที่อยู่นิ่งขึ้นมาใหม่และคายลูกคิวบอลออกมาหรือไม่? กล่าวอีกนัยหนึ่ง จักรวาลของเรามีปุ่ม UNDO หรือไม่
เครื่องยนต์ฟิสิกส์โดยประมาณกับผีเสื้อ
เมื่อหกปีก่อน ฉันได้ทำการทดลอง ฉันใช้เครื่องมือทางฟิสิกส์โดยประมาณที่ไม่สมบูรณ์ ดังที่วิดีโอแสดง การทดสอบล้มเหลว สามเหลี่ยมกลับคืนรูปแต่ไม่ได้อยู่นิ่ง (หากต้องการเล่นซ้ำ/หยุดวิดีโอชั่วคราว ให้กดปุ่มที่มุมซ้ายล่าง)
ในตอนนั้น ฉันระบุว่าความล้มเหลวเกิดจากบัตเตอร์ฟลายเอฟเฟ็กต์ เอฟเฟกต์ผีเสื้อบอกว่าความแตกต่างเล็กน้อย (หรือการประมาณ) ในเงื่อนไขเริ่มต้นสามารถนำไปสู่ความแตกต่างขนาดใหญ่ในภายหลัง ความล้มเหลวของการทดลองเป็นแรงบันดาลใจให้บทกวีนี้:
ทุกอย่างผันกลับได้พูดว่า Newton
Stop เปลี่ยนทิศทาง ดำเนินการต่อ scootin'
Poincaré กล่าวว่า ไม่ เป้าหมายของเรามีขีดจำกัด
เราพยายามแล้ว แต่ไม่มีอะไรเหมือนเดิมได้
เครื่องยนต์ฟิสิกส์ที่สมบูรณ์แบบโดยไม่มีผีเสื้อ
เอ็นจิ้นฟิสิกส์ใหม่ของเราหลีกเลี่ยงเอฟเฟกต์ผีเสื้อ มันรู้ทุกเวลา ตำแหน่ง และความเร็วอย่างแน่นอน 175–9*sqrt(3)/2
มันใช้นิพจน์เช่น ดังนั้น เราควรจะตีบิลเลียดกลับด้านได้ใช่ไหม? มาดูกัน. (หากต้องการเล่นซ้ำ/หยุดวิดีโอชั่วคราว ให้กดปุ่มที่มุมซ้ายล่าง เสียงจะมีประโยชน์)
มันยังใช้งานไม่ได้ สามเหลี่ยมกลับคืนรูปอีกครั้ง แต่ก็ไม่ได้อยู่ด้วยกัน สิ่งนี้ทำให้ฉันเศร้า อย่างไรก็ตาม ในฐานะโปรแกรมเมอร์ เราไม่ได้เศร้าใจ เราได้รับการดีบั๊ก ในกรณีนี้ เราต้องแก้ปัญหาโลก
เราจะเริ่มต้นด้วยการรันเหตุการณ์จำลองตามเหตุการณ์:
การขาดความสมมาตรทำให้คุณประหลาดใจหรือไม่? ในฐานะโปรแกรมเมอร์ เรารู้ขั้นตอนการดีบักถัดไป: สร้างตัวอย่างที่สามารถทำซ้ำได้น้อยที่สุด กล่าวอีกนัยหนึ่งคือหาตัวอย่างเล็ก ๆ ที่แสดงถึงปัญหาเดียวกัน
พิจารณาโลกสามวงกลมใบนี้ เราเรียกใช้สองครั้ง
ในเฟรมที่ 3 ให้ดูที่ลูกศรความเร็วของลูกคิวบอล ลูกศรชี้ไปในทิศทางต่างๆ โลกได้แยกจากกัน
เราสามารถติดตามสาเหตุไปยังเฟรมที่สอง ที่นาฬิกา = 14 ลูกคิวบอลกระทบอีกสองลูก แต่ลูกไหนโดนก่อนทันที? ไม่ว่าจะโดนอะไรก่อน จะได้รับพลังงานมากขึ้น ทำลายสมมาตร
ฉันได้ยินว่าคุณคัดค้านการจำลองโดยเลือกการชนกันเป็นอันดับแรก ทำไมไม่รักษาความสมมาตรด้วยการแบ่งปันพลังงานอย่างเท่าเทียมกัน? ก็เพราะ…
- เราได้พูดถึงสามตัวเลือก — พลังงานสูงสุดสำหรับลูกบอล 1, พลังงานสูงสุดสำหรับลูกบอล 2 หรือพลังงานเท่ากัน อย่างไรก็ตาม โดยทั่วไปแล้ว ตัวจำลองต้องเผชิญกับตัวเลือกที่ต่อเนื่องไม่สิ้นสุด มันสามารถแบ่งพลังงานใน สัดส่วน ใดก็ได้ระหว่างลูกบอลทั้งสองในขณะที่ยังคงรักษาพลังงานและโมเมนตัม อะไรทำให้ "เท่าเทียมกัน" เป็นพิเศษ?
- โอเค ฉันยอมรับว่าใน กรณี นี้ความ "เท่ากัน" อาจได้รับการพิสูจน์โดยความสมมาตร อย่างไรก็ตาม โดยทั่วไปจะไม่มีความสมมาตร พิจารณาการชนกันแบบไม่สมมาตรระหว่างวงกลมเคลื่อนที่สามวง ความสมมาตรจึงไม่มีคำตอบ
เมื่อสงสัย ให้ทำอะไรง่ายๆ ฉันมีโปรแกรมจำลองจัดการการชนกันหลายครั้งเป็นรายการการชนแบบคู่ จากนั้นจะประมวลผลแต่ละคู่ตามลำดับแบบสุ่ม ตัวอย่างเช่น เมื่อวงกลมสามวง — A, B, C — ชนกัน เรามีคู่ชนกันมากถึงสามคู่ — AB, BC, AC — ซึ่งสามารถเรียงลำดับได้ 3! นั่นคือ 6 วิธี
แม้แต่วิธีการง่ายๆ นี้ก็นำไปสู่ผลลัพธ์ที่เป็นไปได้จำนวนมาก ในโลกบิลเลียดที่มีลูกบอลสามเหลี่ยม 15 ลูก เครื่องยนต์มักจะเห็นการชนกัน 5 ถึง 7 คู่ (ดังนั้น 120 ถึง 5,040 ผลลัพธ์) นอกจากนี้ยังเห็นการชนกันของ 18 คู่ (ดังนั้น 18! หรือผลลัพธ์ 6,402,373,705,728,000)
ความรู้สึกโชคดี?
สิ่งนี้ทำให้เกิดคำถามใหม่ คุณสามารถพลิกบิลเลียดแตกได้ไหมถ้าคุณโชคดีมาก? ฉันเชื่อว่าคำตอบคือ “ใช่” เสมอ แต่ฉันไม่รู้ว่าจะพิสูจน์ได้อย่างไร อย่างไรก็ตาม สำหรับโลกที่มีลูกบอล 3 เหลี่ยม ฉันลองเมล็ดแบบสุ่มหลายๆ แบบ เมล็ดที่ 17 ที่ฉันลองได้ผล สร้างวิดีโอเหตุการณ์นี้:
และวิดีโอปกตินี้:
ดังนั้น แม้ว่าจะมีฟิสิกส์ที่สมบูรณ์แบบและมีความแม่นยำเป็นอนันต์ โลกก็ยังไม่สามารถกำหนดได้ เว้นแต่เราจะโชคดีมากๆ ผลลัพธ์นี้ไม่ได้ขึ้นอยู่กับเอฟเฟกต์ผีเสื้อ (ความแตกต่างเล็กน้อยที่นำไปสู่ความแตกต่างขนาดใหญ่) หรือความไม่แน่นอนของควอนตัม แต่ขึ้นอยู่กับจำนวนวิธีที่ไม่มีที่สิ้นสุดที่วัตถุสามชิ้นหรือมากกว่านั้นสามารถแลกเปลี่ยนพลังงานและโมเมนตัมได้ในขณะที่ยังคงปฏิบัติตามกฎของฟิสิกส์นิวตัน
ตอนนี้เราสามารถตอบคำถามย้อนกลับได้: โลกที่สมบูรณ์แบบและแม่นยำไร้ขอบเขตสามารถย้อนกลับได้หรือไม่? เราได้เห็นแล้วว่าในทางปฏิบัติ คำตอบคือ “ไม่”
น่าแปลกใจที่นักฟิสิกส์ตอบว่า "ใช่" ยังไง? โดยแอบใช้คำจำกัดความที่แตกต่างกันของ "การย้อนกลับ" พวกเขากล่าวว่าระบบสามารถ "ย้อนกลับได้" หากมีโอกาสที่ระบบจะกลับสู่สถานะก่อนหน้า แม้ว่าโอกาสนั้นจะเป็นหนึ่งใน 6,402,373,705,728,000 หรือการเลือกหนึ่งจุดบนความต่อเนื่องที่ไม่มีที่สิ้นสุดก็ตาม
สรุปส่วนที่ 2
โลกไม่ได้กลับด้านในทางปฏิบัติ! ด้วยเครื่องมือทางฟิสิกส์ที่สมบูรณ์แบบของเรา เราได้ตอบคำถามทางปรัชญาแล้ว
ในตอนที่ 1เราได้พัฒนากลไกทางฟิสิกส์ที่สมบูรณ์แบบในระดับสูงสุดและนำไปใช้กับโลกต่างๆ เช่น ลูกเทนนิสและการหล่นของบาสเก็ตบอล
ในส่วนที่ 2 เราเริ่มต้นด้วยการพยายามทำให้ลูกบิลเลียดกลับมามีรูปร่างเป็นรูปสามเหลี่ยมนิ่งแล้วจึงคายลูกคิวบอลออกมา สิ่งนี้ล้มเหลวในปี 2558 เมื่อฉันลองใช้เครื่องมือทางฟิสิกส์ที่ไม่สมบูรณ์ เราสามารถระบุได้ว่าความล้มเหลวนั้นเป็นเอฟเฟกต์ผีเสื้อ มันล้มเหลวอีกครั้งด้วยเอ็นจิ้นฟิสิกส์ที่สมบูรณ์แบบใหม่ของเรา เมื่อใช้ทักษะการดีบั๊กของเรา เราพบว่าปัญหาคือความไม่แน่นอนของการชนกันหลายครั้ง มีเพียงโลกที่เรียบง่ายและโชคดีเท่านั้นที่เราเคยเห็นการย้อนกลับ
ต่อไป ในตอนที่ 3 เราจะดูวิธีทำให้คอมพิวเตอร์สร้างฟังก์ชัน Python สองตัวที่อยู่ภายใต้กลไก ในตอนที่ 4 เราจะเร่งเครื่องยนต์เล็กน้อย (แต่ยังไม่เพียงพอ) และหารือเกี่ยวกับข้อจำกัดต่างๆ
หากคุณมีไอเดียสำหรับการจำลองที่คุณต้องการให้ฉันดำเนินการ โปรดส่งมาให้ฉัน พวกเขาอาจกลายเป็นพื้นฐานของส่วนที่ 5
คุณสามารถดาวน์โหลดโค้ดนี้ได้จากCarlKCarlK/perfect-physics (github.com ) แจ้งให้เราทราบหากมีความสนใจและฉันจะสร้างตัวติดตั้งที่ดีกว่า
ติดตามCarl M. Kadie — สื่อสำหรับการแจ้งเตือนในส่วนต่อไป ทุกส่วนจะอ่านได้ฟรี สุดท้าย บน YouTube ฉันมีแบบจำลองทางฟิสิกส์ ที่เก่ากว่า (โดยประมาณ) และ วิดีโอเกี่ยวกับ ธรรมชาติที่พยายามจะตลกขบขัน