วิธีการบางอย่างในการเป็นตัวแทนของรางรถไฟคืออะไร?


21

ฉันมองย้อนกลับไปในขณะนี้สำหรับโครงการขนาดเล็ก แต่ไม่ไกลเกินไป ฉันต้องการสร้างโปรแกรมขนาดเล็กที่ให้ผู้ใช้วาดรางรถไฟและอนุญาตให้ "รถไฟ" เพื่อติดตามเส้นทางดังกล่าวบนเครื่องบิน 2D ฉันต้องการให้แทร็กเป็นรูปแบบที่ค่อนข้างฟรีและให้ผลลัพธ์เป็นเส้นเรียบที่ดี ฉันเล่นไปรอบ ๆ พร้อมกับ splines ลูกบาศก์และมีผลลัพธ์ที่ดี แต่มีปัญหามากมายที่การขึ้นรถไฟเพื่อติดตามเส้นโค้ง ฉันมีปัญหามากมายในการสร้างหลายแทร็กและเปลี่ยนรถไฟจากแทร็กหนึ่งไปอีกแทร็กหนึ่ง

ใครบ้างมีคำแนะนำบทความหรือซอร์สโค้ดที่สามารถช่วยฉันคิดออกบางสิ่งบางอย่าง? ขอบคุณ!


3
มันจะช่วยถ้าคุณอธิบายว่าปัญหาของคุณคืออะไรที่คุณพบ
Rachel Blum

1
ฉันชอบที่จะดูตัวอย่างเกมของคุณ
ashes999

คำตอบ:


10

เมื่อวาดแทร็คหรือถนนฉันต้องการเริ่มต้นด้วยเส้นโค้ง อย่างไรก็ตามครั้งสุดท้ายที่ฉันต้องดิ้นรนกับเส้นโค้ง (ตามที่ราเชลบลัมกล่าวถึงการเคลื่อนไหวที่ราบรื่นบนเส้นโค้งนั้นน่ากลัวทั้งคู่เนื่องจากการตั้งค่าพารามิเตอร์และระยะทาง) บางคนแนะนำให้ฉันรู้ว่าถนนจริงหลายแห่งใช้โค้งแบบวงกลม ความโค้งคงที่ทำให้ง่ายต่อการคำนวณระยะทางและเคลื่อนที่ด้วยความเร็วคงที่ตลอดเส้นทาง นอกจากนี้พวกเขาดูดี

ฉันเริ่มเล่นกับถนนที่สลับระหว่างเส้นโค้งวงกลมและเส้นตรง มันคล้ายกับแนวทางของWillแต่ส่วนโค้งของวงกลมจะมีรัศมีแปรผัน ฉันมีความสุขมากกับวิธีการนี้ แต่ไม่ได้ลงเอยด้วยการทำอะไรกับมัน ลองใช้ตัวอย่างนี้ (Flash): ตัวควบคุมด้านซ้ายใช้สำหรับเส้นโค้งและส่วนควบคุมด้านขวาใช้สำหรับส่วนโค้งวงกลม (ใช้แถบเลื่อนเพื่อควบคุมความยาวและจุดจับลากเพื่อควบคุมมุม) สร้างเส้นโค้งที่แน่นมากโดยการลากจุดสิ้นสุดของถนนเพื่อดูว่าส่วนโค้งของวงกลมดูดีกว่ามากเพียงใด

หรือหากคุณต้องการเล่นกับกริด (แนะนำโดยIain ) ให้ลองวาดจากขอบหนึ่งไปอีกด้านหนึ่งแทนที่จะเป็นสี่เหลี่ยมจัตุรัสถึงสี่เหลี่ยม นี่คือตัวอย่าง (Java applet)


ผมเคยเขียนอีกต่อไปบทความเกี่ยวกับการใช้โค้งเป็นวงกลมเพื่อเป็นตัวแทนของถนนและรางรถไฟ
amitp

7

การใช้เส้นโค้ง hermite ที่เหมาะสมสามารถนำไปสู่มุมที่แคบและดูค่อนข้างเหมือนรถไฟ:

การใช้ hermite splines

ฉันได้รับผลลัพธ์ที่น่าพอใจมากขึ้นจากการรักษาเส้นทางเป็นเส้นตรงเข้าร่วมวงการที่ข้อต่อ:

ป้อนคำอธิบายรูปภาพที่นี่

เคล็ดลับคือการคำนวณแทนเจนต์ด้านในและด้านนอกของวงกลมร่วมที่อยู่ติดกันและหาผลพันของแต่ละข้อต่อเพื่อให้คุณผ่านทางด้านขวาของมัน

และในตรรกะการติดตามให้หลีกเลี่ยงเส้นทางการแยกด้วยตนเองหรือเปลี่ยนเป็นทางแยก :)

นี่คือวิดีโอที่ใช้วิธีการนี้: http://www.youtube.com/watch?v=PAVksn4btKU


6

คุณอาจจะลองปล่อยให้ผู้เขียนใช้แทร็คโดยใช้เกลียว Cornu คุณจะพบว่าไม่มีบทความเกี่ยวกับวรรณกรรมออนไลน์เพราะ splines เป็นวิธีการที่เป็นตัวแทนของเส้นโค้งในซอฟต์แวร์ อย่างไรก็ตามมันเป็นเส้นทางของเส้นทางรถไฟที่แท้จริง แรฟเลเวียนได้ทำมากของการทำงานที่นิยมชมชอบพวกเขา


2

คุณสามารถลองใช้วิธีการแบบกริดซึ่งแต่ละสแควร์สามารถลิงก์ไปยังสแควร์สอื่น ๆ จากนั้นคุณสามารถมีบางชิ้นที่ครอบคลุมหลาย ๆ สี่เหลี่ยมเพื่อสร้างเส้นโค้งที่นุ่มนวลขึ้น เป็นแบบแยกส่วนพื้นฐานเช่นชุดรถไฟ


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

2

ฉันลองใช้เทคนิคต่าง ๆ ในการติดตั้งรางรถไฟและพบว่าส่วนของวงกลมและเส้นตรงให้ผลลัพธ์ที่ดีที่สุดและคณิตศาสตร์ที่ง่ายที่สุดในการวิ่งรถไฟ

น่าเสียดายที่มันยังทำให้แทร็กค่อนข้างซับซ้อนและไม่ง่ายนักเนื่องจากการเคลื่อนไหวเล็ก ๆ ของจุดควบคุมจะส่งแทร็คไปในทิศทางที่แตกต่างอย่างสิ้นเชิง

คณิตศาสตร์สำหรับการตัดสินใจว่าจะวางรางอย่างไรนั้นค่อนข้างยุ่งยากเช่นเดียวกับการเพิ่มจุดควบคุมให้มากขึ้น

ฉันมีการสาธิตสั้น ๆ เกี่ยวกับhttp://www.dailymotion.com/video/xgl2kp_openrailz-tech-demo-3_videogames


-1

บางทีนี่อาจจะเป็นประโยชน์:
พฤติกรรมการหมุนพวงมาลัยสำหรับตัวละครอิสระ: http://www.red3d.com/cwr/steer/


ไม่ได้ฝึกให้แทร็กของพวกเขาเหรอ?
จะ

@ Will: มีส่วนย่อย (ซึ่งฉันไม่ได้อ่าน) เกี่ยวกับเส้นทางที่ตามมาred3d.com/cwr/steer/PathFollow.html
o0 '

ใช่ แต่รถไฟบนแทร็กสามารถเปลี่ยนความเร็วได้เท่านั้น เส้นทางของมันถูกกำหนดโดยแทร็ก?
จะ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.