9

私はこれについて典型的な物理方程式を試しましたが、方程式は一定の加速度を扱い、正しく機能するように変更する必要があるため、実際には機能しません。基本的に、私は広範囲の速度で走行できる車を持っており、その進路の終わりに達すると、一定の距離と時間で減速して停止する必要があります。

つまり、次のようになります。
V0、または現在の速度
Vf、または到達したい速度(通常は0)
t、またはパスの終わりに到達するのにかかる時間
d、または変更時に移動したい距離V0からVfへ


a、またはV0からVfに移動するために必要な加速度 を計算したい

これがプログラミング固有の質問になる理由はa、車が停止し続けるため、タイムステップごとに再計算する必要があるためです。したがって、V0常にV0最後のタイムステップから、最後のタイムステップで計算されplusたものに変更されます。aつまり、基本的にはゆっくりと停止し始め、最終的には実際の車のように突然停止します。

編集:
大丈夫、素晴らしい反応をありがとう。私が必要としていたことの多くは、これについて考える手助けをすることでした。皆さんからさらにいくつかのアイデアが得られたので、具体的に説明します。

目的地からの車を持っているcので。で運転しています。移動するまでの速度に達する加速度を見つけたいと思います。64 pixelsd=642 pixels per timesteptimestep is 1/60 of a seconda0.2 pixels per timestepd
d = 64 //distance
V0 = 2 //initial velocity (in ppt)
Vf = 0.2 //final velocity (in ppt)

また、これはゲームループで発生するため、変数deltaは各アクションに渡されます。これはmultiple of 1/60s that the last timestep tookです。つまり、1/60delta秒かかった場合は1.0、1/30秒かかった場合deltaは0.5になります。加速が実際に適用される前に、このデルタ値が乗算されます。同様に、車が再び移動する前に、その速度にデルタ値が掛けられます。これはかなり標準的なものですが、私の計算で問題を引き起こしている可能性があります。

4

6 に答える 6

9

開始速度から最終速度までaの距離の線形加速度:dViVf

a = (Vf*Vf - Vi*Vi)/(2 * d)

編集

編集後、必要なものを試してみてください...

この式を使用して数値を挿入すると、-0,0309375の一定の加速度が得られます。それでは、この結果を「a」と呼び続けましょう。

タイムスタンプ(フレーム?)の間に必要なのは、実際には加速度ではなく、車両の新しい位置ですよね?したがって、次の式を使用します。

Sd = Vi * t + 0.5 * t * t * a

ここで、Sdは現在のフレーム/モーメント/ sum_of_deltasでの開始位置からの現在の距離、Viは開始速度、tは開始からの時間です。

これにより、減速一定になりますが、線形であっても、速度は制約に対応します。

非線形の減速が必要な場合は、非線形の内挿法を見つけて、加速度ではなく、単に2点間の位置を内挿することができます。

location = non_linear_function(time);
于 2009-07-06T17:24:34.267 に答える
6

与える4つの制約は、線形システム(加速度が一定のシステム)には多すぎます。この場合、3つの変数で加速度を計算し、4番目の変数を決定できます。ただし、このシステムは、完全に一般的な非線形システムに対して指定されている範囲をはるかに下回っています。与えられたすべての制約を満たしながら、時間の経過とともに加速度を変更する方法は数え切れないほど無限にある可能性があります時間の経過とともにどのような曲線加速度が変化するかをより適切に指定できますか?

直線的に変化する加速度が与えられた場合、0インデックスを使用して「開始時」を意味し、1を使用して「終了時」を意味し、Dを使用してデルタを使用して「変動」を意味します。

  a(t) = a0 + t * (a1-a0)/Dt

ここで、a0とa1は、さまざまな制約をすべて満たすために計算する2つのパラメーターであり、計算します(すべて手作業で行ったように、ミスステップがなかった場合)。

DV = Dt * (a0+a1)/2
Ds = Dt * (V0 + ((a1-a0)/6 + a0/2) * Dt)

DV、Dt、Dsがすべて与えられているとすると、未知数a0とa1に2つの線形方程式が残るので、これらを解くことができます(ただし、派生を再確認しやすくするために、この形式のままにしておきます!!! )。

空間と速度の変化を計算するためにすべてのステップで適切な式を適用している場合、a0とa1を一度だけ計算するか、残りのDt、Ds、DVに基づいてすべてのステップで再計算するかに違いはありません。

于 2009-07-06T17:09:24.373 に答える
5

方程式で時間依存の加速度をシミュレートしようとしている場合、それは単にそれを想定する必要があることを意味します。F = maを加速度方程式と一緒に統合する必要があります、それだけです。加速度が一定でない場合は、1つではなく連立方程式を解く必要があります。

つまり、同時に統合する必要があるのは、実際には3つのベクトル方程式です。変位、速度、加速度の各コンポーネントに1つ、または合計9つの方程式です。時間の関数としての力は、問題の入力になります。

1Dモーションを想定している場合は、3つの連立方程式になります。速度と変位の両方は非常に簡単です。

于 2009-07-06T17:11:22.747 に答える
1

実生活では、車の停止能力は、ブレーキペダルの圧力、進行中のエンジンブレーキ、表面状態などに依存します。また、車が実際に停止したときの最後に「グラブ」があります。モデリングは複雑で、プログラミングWebサイトで良い答えが見つかる可能性はほとんどありません。何人かの自動車エンジニアを見つけてください。

それを除けば、あなたが何を求めているのかわかりません。ブレーキのスケジュールを決めようとしていますか?惰性走行中にある程度の減速があり、ブレーキをかけているのと同じように?実際の運転では、これらの操作では通常、時間ではなく距離が考慮されます。

私が知る限り、あなたの問題はあなたが具体的なことを何も求めていないということです。それはあなたが実際に何を望んでいるのか本当に理解していないことを示唆しています。これの使用例を提供していただければ、おそらくお手伝いできます。現状では、過剰決定または過剰制約のいずれかである問題の骨子を提供しましたが、それで私たちができることは実際には何もありません。

于 2009-07-06T17:28:36.037 に答える
1

線形加速度で1mで10m/sから0m/sに移行する必要がある場合は、2つの方程式が必要です。まず、停止するのにかかる時間(t)を見つけます。

v0 = initial velocity
vf = final velocity
x0 = initial displacement
xf = final displacement
a = constant linear acceleration

(xf-x0)=.5*(v0-vf)*t
t=2*(xf-x0)/(v0-vf)
t=2*(1m-0m)/(10m/s-0m/s)
t=.2seconds

next to calculate the linear acceleration between x0 & xf

(xf-x0)=(v0-vf)*t+.5*a*t^2
(1m-0m)=(10m/s-0m/s)*(.2s)+.5*a*((.2s)^2)
1m=(10m/s)*(.2s)+.5*a*(.04s^2)
1m=2m+a*(.02s^2)
-1m=a*(.02s^2)
a=-1m/(.02s^2)
a=-50m/s^2

in terms of gravity (g's)

a=(-50m/s^2)/(9.8m/s^2)
a=5.1g over the .2 seconds from 0m to 10m
于 2014-06-23T23:41:24.520 に答える
0

問題は、過剰制約または過小制約(aは一定ではありませんか?最大値はありますか?)またはあいまいです。

最も単純な式はa=(Vf-V0)/tになります

編集:時間が制約されておらず、距離sが制約されており、加速度が一定である場合、関連する式はs =(Vf + V0)/ 2 * t、t =(Vf-V0)/ aであり、これはa=に簡略化されます。 (Vf 2 -V0 2)/(2s)。

于 2009-07-06T17:10:06.933 に答える