Một số phương pháp để đại diện cho đường ray xe lửa là gì?


21

Tôi đã xem xét điều này một thời gian trước cho một dự án nhỏ, nhưng đã không đi quá xa. Tôi muốn tạo một chương trình nhỏ cho phép người dùng vẽ đường ray xe lửa và sau đó cho phép "đoàn tàu" theo dõi đường ray đã nói trên mặt phẳng 2D. Tôi muốn bản nhạc ở dạng khá miễn phí và kết quả là một dòng mượt mà. Tôi đã chơi xung quanh với các khối vuông và có kết quả tốt, nhưng gặp rất nhiều rắc rối khi tàu chạy theo đường trục. Tôi cũng gặp nhiều khó khăn khi tạo nhiều tuyến đường và chuyển một chuyến tàu từ đường này sang đường khác.

Có ai có lời khuyên, bài viết hoặc mã nguồn có thể giúp tôi tìm ra điều gì không? Cảm ơn!


3
Nó sẽ giúp nếu bạn mô tả những vấn đề của bạn là bạn gặp phải.
Rachel Blum

1
Tôi rất thích xem một bản demo của trò chơi của bạn.
tro999

Câu trả lời:


10

Khi vẽ đường ray hoặc đường, tôi luôn muốn bắt đầu bằng splines. Tuy nhiên, lần cuối cùng tôi vật lộn với spline (như Rachel Blum đã đề cập, chuyển động trơn tru trên một spline là khó khăn cả vì tham số hóa và khoảng cách), một người nào đó đề nghị với tôi rằng nhiều con đường thực sự sử dụng vòng cung thay vì spline. Độ cong không đổi giúp dễ dàng tính toán khoảng cách và di chuyển với vận tốc không đổi dọc theo chúng. Thêm vào đó, chúng trông tốt.

Tôi bắt đầu chơi với những con đường xen kẽ giữa các cung tròn và đường thẳng. Nó tương tự như cách tiếp cận của Will nhưng các cung tròn có bán kính thay đổi. Tôi khá hài lòng với cách tiếp cận này nhưng cuối cùng lại không làm gì với nó. Hãy thử bản demo này (Flash): các điều khiển ở bên trái là dành cho spline và các điều khiển ở bên phải dành cho một cung tròn (sử dụng thanh trượt để điều khiển độ dài và tay cầm kéo để điều khiển góc). Tạo một đường cong rất chặt bằng cách kéo đến cuối con đường để xem vòng cung tròn trông đẹp hơn bao nhiêu.

Ngoài ra, nếu bạn muốn chơi với lưới (được đề xuất bởi Iain ), hãy thử vẽ từ cạnh này sang cạnh khác thay vì vuông thành vuông. Đây là bản demo (Java applet).



7

Sử dụng spline ẩn phù hợp có thể dẫn đến các góc hẹp và trông khá giống đường ray:

sử dụng spline ẩn

Tôi đã có nhiều kết quả làm hài lòng hơn từ việc coi đường dẫn là các đường thẳng nối các vòng tròn ở khớp:

nhập mô tả hình ảnh ở đây

Bí quyết là tính toán các tiếp tuyến bên trong và bên ngoài của các vòng tròn liền kề và tìm ra cuộn dây của mỗi khớp để bạn vượt qua bên phải của nó.

Và, trong logic theo dõi, tránh các đường tự giao nhau hoặc biến chúng thành các nút giao :)

Đây là video sử dụng phương pháp này: http://www.youtube.com/watch?v=PAVksn4btKU


6

Bạn có thể thử cho phép người dùng tác giả các bản nhạc bằng cách sử dụng xoắn ốc Cornu . Bạn sẽ tìm thấy tài liệu tiếp theo về nó trực tuyến, bởi vì spline là cách thực tế để biểu diễn các đường cong trong phần mềm. Tuy nhiên, đó là cách đường ray thực tế được đi theo con đường. Raph Levien đã thực hiện rất nhiều công việc phổ biến chúng .


2

Bạn có thể thử một cách tiếp cận dựa trên lưới trong đó mỗi hình vuông có thể liên kết với một hoặc nhiều hình vuông khác. Sau đó, bạn có thể có một số mảnh bao gồm nhiều hình vuông, để tạo ra một số đường cong mượt mà hơn. Về cơ bản mô-đun, giống như một bộ xe lửa.


1
Tôi đã thử một cái gì đó tương tự như một cách tiếp cận dựa trên lưới. Về cơ bản tôi đã tạo ra các bản nhạc để bạn có thể nhấp chúng lại với nhau theo cách để mang lại một chút tự do hơn so với các lưới đơn giản. Khái niệm rất giống nhau, tôi nghĩ. Nó hoạt động tốt, nhưng vẽ các bản nhạc bằng cách chọn mảnh phù hợp mỗi lần hút.
hokiecsgrad

2

Tôi đã thử các kỹ thuật khác nhau để thực hiện các đường ray xe lửa, và tôi thấy rằng các phần của vòng tròn và đường thẳng đang cho kết quả tốt nhất và toán học dễ nhất để chạy tàu.

Thật không may, nó cũng làm cho bản nhạc được đặt khá phức tạp và không trực quan lắm, vì các chuyển động nhỏ của các điểm kiểm soát sẽ gửi bản nhạc theo một hướng hoàn toàn khác.

Toán học cho việc quyết định cách đặt đường đua trở nên khá khó khăn, khi thêm nhiều điểm kiểm soát.

Tôi đã có một bản demo ngắn trên http://www.dailymotion.com/video/xgl2kp_openrailz-tech-demo-3_videogames .


-1

Có lẽ điều này sẽ hữu ích:
Hành vi chỉ đạo cho các nhân vật tự trị: http://www.red3d.com/cwr/steer/


không phải là tàu bị giam cầm theo dõi của họ?
Sẽ

@ Will: có một phần phụ (mà tôi chưa đọc) về đường dẫn theo red3d.com/cwr/steer/PathFollow.html
o0 '.

có nhưng một chuyến tàu trên đường ray chỉ có thể thay đổi vận tốc. Con đường của nó được quyết định bởi đường đua?
Sẽ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.