Tren raylarını temsil etmek için bazı yöntemler nelerdir?


21

Bunu bir süre önce küçük bir proje için araştırdım ama fazla ileri gitmedim. Kullanıcının bir tren yolu çizmesine izin veren ve ardından bir "trenin" söz konusu parçayı 2B düzlemde izlemesini sağlayan küçük bir program oluşturmak istiyorum. Pistin oldukça serbest formda olmasını ve düzgün bir çizgiyle sonuçlanmasını istiyorum. Kübik spline'larla oynamıştım ve iyi sonuçlar aldım, ancak trenin çizgiyi takip etmesinde bir sürü sorun yaşadım. Ayrıca birden fazla parça oluşturma ve treni bir parçadan diğerine değiştirme konusunda çok sorun yaşadım.

Bir şeyleri çözmeme yardım edebilecek tavsiye, makale veya kaynak kodu olan var mı? Teşekkürler!


3
Karşılaştığınız sorunların ne olduğunu açıklarsanız yardımcı olur.
Rachel Blum,

1
Oyununun demosunu görmek isterim.
ashes999

Yanıtlar:


10

Yol ya da yol çizerken her zaman spline'larla başlamak istiyorum. Ancak, son kez spline'larla mücadele ettiğimde ( Rachel Blum'un da belirttiği gibi, bir spline'daki yumuşak hareket hem parametreleştirme hem de mesafeler nedeniyle çok hassastır), birisi bana birçok gerçek yolun spline yerine dairesel yaylar kullandığını söyledi. Sabit eğrilik, mesafeleri hesaplamayı ve aralarında sabit bir hızla hareket etmeyi kolaylaştırır . Ayrıca, iyi görünüyorlar.

Dairesel yaylar ve düz çizgiler arasında değişen yollarla oynamaya başladım. Will'in yaklaşımına benzer, ancak dairesel yayların değişken yarıçapı vardır. Bu yaklaşımdan çok memnun kaldım ama sonunda bir şey yapamadım. Bu gösterimi deneyin (Flash): Soldaki kontroller eğri çizgiler içindir ve sağdaki kontroller dairesel bir yay içindir (uzunluğu kontrol etmek için sürgüyü ve açıyı kontrol etmek için sürgü kolunu kullanın). Dairesel yayın ne kadar güzel göründüğünü görmek için yolun sonunu sürükleyerek çok sıkı bir eğri yapın.

Alternatif olarak, ızgaralarla oynamak istiyorsanız ( Iain tarafından önerilen ), kare kare yerine kenardan kenara çizmeyi deneyin. İşte bir demo (Java uygulaması).



7

Uygun hermite spline'ların kullanılması dar köşelere yol açabilir ve tren rayına yakın görünebilir:

hermite spline'ları kullanma

Yolu, eklemlerde çemberleri birleştiren düz çizgiler olarak görmekten çok daha hoş sonuçlar aldım:

görüntü tanımını buraya girin

İşin püf noktası , bitişik mafsal dairelerinin iç ve dış teğetlerini hesaplamak ve her bir mafsalın sarımını yapmaktır, böylece sağ tarafından geçersiniz.

Ve, iz bırakma mantığında yolun kendisiyle kesişme noktalarından kaçının veya bunları kavşaklara dönüştürün :)

İşte bu yaklaşımı kullanan bir video: http://www.youtube.com/watch?v=PAVksn4btKU


6

Cornu spirallerini kullanarak kullanıcının izleri yazmasına izin vermeyi deneyebilirsiniz . Çevrimiçi olarak bu konuda yok edebilecekleri literatürden bulabilirsiniz, çünkü splinelar yazılımdaki eğrileri temsil etmenin fiili yoludur. Bununla birlikte, gerçek demiryolu raylarının nasıl dağıldığıdır. Raph Levien, onları popülerleştiren çok çalışma yaptı .


2

Her karenin bir veya daha fazla kareye bağlanabileceği ızgara tabanlı bir yaklaşım deneyebilirsiniz. Daha yumuşak eğriler oluşturmak için birden fazla kareyi kaplayan bazı parçalara sahip olabilirsiniz. Temelde modüler, bir tren takımı gibi.


1
Izgara tabanlı bir yaklaşıma benzer bir şey denedim. Temel olarak, basit ızgaralardan biraz daha fazla özgürlük verecek şekilde tıklayabilmeniz için parça parçaları oluşturdum. Bence çok benzer bir kavram. Tamam çalıştı ama izleri her çekildiğinde uygun parçayı seçerek çiziyordu.
hokiecsgrad

2

Ray raylarını uygulamak için çeşitli teknikler denedim ve dairelerin ve düz çizgilerin bölümlerinin en iyi sonucu verdiğini ve treni çalıştırmak için en kolay matematiği bulduğunu öğrendim.

Ne yazık ki, kontrol noktalarının küçük hareketleri yolu tamamen farklı bir yöne göndereceğinden, parkuru oldukça karmaşık ve sezgisel değil olarak bıraktı.

Parçanın nasıl döşeneceğine karar vermek için gereken matematik, daha fazla kontrol noktası eklemek gibi oldukça zorlaşıyor.

Http://www.dailymotion.com/video/xgl2kp_openrailz-tech-demo-3_videogames adresinde kısa bir demo var .


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.