Tamam, sonuçlara geri döndüm!
İki yaklaşım denedim:
Tekerlek merkezlerinin hareketini düzenleyen bir diferansiyel denklem elde etmek için katı mekaniği kullanmak: sistem "bisiklet" in girişleri arka tekerlekteki tork ve ön tekerleğin açısıdır ve çıktılar merkezlerin kinematiğidir tekerlekler. Ama vazgeçtim, zordu!
Arka tekerlek, ön tekerleği ön tekerlek düz değilken ileri doğru "ittiğinde" geometrik bir bakış açısıyla ne olacağını tahmin etmeye çalışmak. Bu yöntem doğrudan gerçek bir diferansiyel denklem alabileceğiniz sonsuz küçük artışların bir denklemini (aşağıya bakınız) verir. ODE'yi elde etmek için bu ilk denklemi manipüle etmeyi denemedim ama tahminim, katı mekaniklerini kullanarak aynı ODE'yi elde etmiş olacağım. Sadece doğru geliyor.
İşaretler ve hipotezler:
Biz ex ve ey temel vektörleri ile düzlemdeyiz .
A arka tekerleğin merkezidir. B , ön tekerleğin merkezidir. Bisiklet L' nin uzunluğu A ve B arasındaki mesafedir . Arasındaki açı ey ve vektör AB olduğu φ . AB ve ön tekerlek arasındaki açı θ'dır .
Sezgisel gerekçe:
Belirli bir anda t , A (t) ' nin AB ile doğrusal hız V (t)' ye sahip olduğunu varsayarız . Bu nedenle, sonsuz bir zaman aralığı dt için ,
A (t + dt) = A (t) + V (t) .dt .
Ayrıca, t zamanında , ön tekerleğin sürüklenmediğini, yani B hızının ön tekerleğin yönü ile doğrusal olduğunu, yani AB ile bir açı forms oluşturduğunu varsayıyoruz . Diyoruz Uθ bir açı oluşturan birim vektör İçeride ISTV melerin RWMAIWi'nin ile AB , ön tekerlek ile aynı yönde, yani birim vektör.
Bu nedenle, t + dt'de ,
B (t + dt) = B (t) + λ.Uθ
belirli bir gerçek, pozitif λ için, bisiklet L' nin uzunluğu korunacak şekilde:
mesafe (A (t + dt), B (t + dt)) = L
Hesaplamalar:
Bu son denklem şu anlama gelir:
norm² (B (t) + λ.Uθ - A (t) - V (t) .dt) = L²
ancak B (t) tanım gereği A (t) + L.Uφ'dur , böylece λ denklemi sağlamalıdır
norm² (L.Uφ + λ.Uθ - V (t) .dt) = L² .
Çözelti, tabii ki, bağımsızdır cp sorun aynı olduğu zaman pozitif doğru kiralama noktaları y . Bu nedenle, R'ye -φ açısına sahip dönme matrisini çağırırsak , λ ,
norm² (L.ey; + λ.Uθ - RV (t) .dt) = L² .
Birkaç hesaplamadan sonra, v'yi V normu olarak adlandırırsak ,
λ = L. (sqrt (1 - (sin (θ). (1-v.dt / L)) ²) - cos (θ)) + v.dt.cos (θ) .
İşte yukarıdaki animasyonu almak için kullanılan pseudocode var (kullanmak yerine Uθ , kullandığım u U (θ + φ) = daha basit olduğu için):
// I start at i=1 because i=0 contains the initial values
for (int i=1; i<=N; i++)
{
// the array in which I stored the successive A points
Aarray[i] = Aarray[i-1] + dt*V;
float lambda = L*( sqrt(1 - (sin(theta)*(1-v*dt/L))**2) - cos(theta) )
+ cos(theta)*v*dt;
// the array in which I stored the successive B points
Barray[i] = Barray[i-1] + lambda*u;
// the AB vector normalized
AiBiUnit = (Barray[i] - Aarray[i])/L;
// Refreshing the velocity of A
V = v*AiBiUnit;
// Refreshing u.
// u is indeed a unit vector separated from AiBiUnit by an angle theta,
// so you get it by rotating the newly computed AiBiUnit by an angle
// of +theta:
u = AiBiUnit.rotate(theta);
}
Çok fazla tekrarlarsanız ve / veya direksiyon açısını arttırırsanız, yörünge tutarlı bir daire olduğuna inanıyorum.