Ok, saya kembali dengan hasil!
Saya mencoba dua pendekatan:
Menggunakan mekanika padatan untuk mendapatkan persamaan diferensial yang mengatur pergerakan pusat roda: input dari sistem "sepeda" adalah torsi di roda belakang dan sudut roda depan, dan outputnya adalah kinematika dari pusat roda. Tapi saya menyerah, itu sulit!
Mencoba menebak apa yang terjadi dari sudut pandang geometris ketika roda belakang "mendorong" roda depan ke depan dengan roda depan tidak lurus. Metode ini secara langsung menghasilkan persamaan kenaikan sangat kecil (lihat di bawah) dari mana Anda bisa mendapatkan persamaan diferensial yang sebenarnya. Saya belum mencoba memanipulasi persamaan pertama ini untuk mendapatkan ODE tetapi dugaan saya adalah bahwa saya akan mendapatkan ODE yang sama menggunakan mekanika padatan. Rasanya benar.
Notasi dan hipotesis:
Kami berada di pesawat dengan basis vektor ex dan ey .
A adalah pusat dari roda belakang. B adalah pusat dari roda depan. Panjang sepeda L adalah jarak antara A dan B . Sudut antara ey dan vektor AB adalah φ . Sudut antara AB dan roda depan adalah θ .
Dasar pemikiran intuitif:
Kita mengira bahwa, pada t instan tertentu , A (t) memiliki kecepatan V (t) kolinear dengan AB . Oleh karena itu, untuk timestep dt sangat kecil ,
A (t + dt) = A (t) + V (t) .dt .
Kami juga menganggap bahwa, pada waktu t , roda depan tidak melayang, yaitu kecepatan B adalah kolinear dengan arah roda depan, yaitu membentuk sudut θ dengan AB . Kami memanggil Uθ vektor satuan yang membentuk sudut θ dengan AB , yaitu vektor satuan dengan arah yang sama dengan roda depan.
Oleh karena itu, pada t + dt ,
B (t + dt) = B (t) + λ.Uθ
untuk λ nyata dan positif tertentu sedemikian sehingga panjang sepeda L dilestarikan:
jarak (A (t + dt), B (t + dt)) = L
Perhitungan:
Persamaan terakhir ini diterjemahkan menjadi
norm² (B (t) + λ.Uθ - A (t) - V (t) .dt) = L²
tetapi B (t) , menurut definisi, adalah A (t) + L.Uφ , sehingga λ harus memenuhi persamaan
norm² (L.Uφ + λ.Uθ - V (t) .dt) = L² .
Solusinya, tentu saja, tidak tergantung dari φ karena masalahnya sama ketika sepeda menunjuk ke arah positif y . Oleh karena itu, jika kita memanggil R matriks rotasi dengan sudut -φ , λ harus menjadi solusi positif
norm² (L.ey; + λ.Uθ - RV (t) .dt) = L² .
Setelah beberapa perhitungan, jika kita memanggil v norma V , Anda dapatkan
λ = L. (sqrt (1 - (sin (θ). (1-v.dt / L)) ²) - cos (θ)) + v.dt.cos (θ) .
Inilah pseudocode yang saya gunakan untuk mendapatkan animasi di atas (alih-alih menggunakan Uθ , saya menggunakan u = U (θ + φ) karena lebih sederhana):
// 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);
}
Jika Anda mengulang banyak dan / atau meningkatkan sudut kemudi, lintasannya adalah sebuah lingkaran, yang koheren, saya percaya.