2009-04-15 20 views
3

オペレーティングシステムのクラスでは、「Jurrasic Park」という名前のスケジューリングシミュレータを作成します。トラックに沿って移動する自動車をシミュレートする

究極の目標は、設定された経路に沿って一連の車を持ち、その車が帰ってくるために設定された場所で列に並んで待っている乗客を拾い上げてツアーに連れて行くことです。これは、トラックとそれに沿って移動する自動車の単純な2d、トップダウンのビューになります。

視覚的に何も表示せずにこれを簡単にコーディングすることはできますが、固定トラックに沿って移動する車を実装するにはどのような方法が最適かはわかりません。

私は、単にOpenGLを使って車を四角形として描くことにしますが、車の位置を更新する方法と、シミュレートされたテーマパーク。

トラックの頂点をリストに格納し、update()の各呼び出しで車を次の頂点に一歩近づける必要がありますか?

+0

妥当なアプローチのようです。 – dommer

+0

オペレーティングシステムクラスでOpenGLを使用する必要がありますか? –

+0

@mmyers、no ...私は、オペレーティングシステムの問題の1つについて魅力的なシミュレーションを構築する必要があります。実装は私に任されています。 – Mithrax

答えて

0

私はそれをシンプルに保つでしょう:

ランタイマー(すべての100ミリ秒)、および各タイマーに新しい場所に車のそれぞれのものを描きます。場所は、車の2D座標(各車?)を含むファイルから読み込まれます。

非常に長くなるように道路を設計する場合(30秒と言う)、30 * 10ポイントを書くことは難しいでしょう。それでは、1秒ごとにファイルの場所を保存する方法はありますか?その2つの間隔の間に9つの死角があり、一定の速度で車を動かすだけです(x + = dx/9、y + = dy/9)。

私はより良いアプローチを聞きたい:)

+0

ポジションを固定しても機能しません。彼等はパスナーなどを待っているかもしれません。 – Mithrax

0

あなたが説明するようにさてあなたは、いくつかのパスを使用することができ、固定小数点パスまたはスプラインをエーテルです。その後、このパス上で固定された「速度」として移動します。これはコーナーリングとしてストレートに同じ費用で車が動くならば、堅く見えるかもしれません。

したがって、各パスセクションに速度を持たせることができますが、多くのスピード設定ポイントが必要になるか、スピードをブレンドする必要があります。そうしないとスピードが急激に変化します。

また、フルカーシミュレーションのために、A *を使用して最適なパスを構築することもできます。それは殺す以上のしかし、非常に涼しい

+0

彼は1つのパスしか持っていません...なぜ彼は「最適な」パスを見つける必要がありますか? – mpen

+0

彼は固定経路を持っていると言っていますが、ほとんどのトラックは幅があり、よりリアルに見たい場合はほとんどの車が角を抱き、コーナーを越えて広がります。 –

0

前方と後方のみがあり、前方に進むことがわかっている場合は、周囲の細胞を見て、道路の色であるものを見つけて移動します道路の中心。

突然カーブしていないと仮定すると、道路が直前にあると仮定して、道路が少し曲がっているかどうかを確認するために左と右にスキャンして中央に留まる処理を減らす。

他のアプローチもありますが、これは単純なIMOであり、あなたの道に優しいカーブを持たせることができます。

もう1つのアプローチは、それをタイルベースにすることです。その前にあなたのタイルを見て、道路方向の変更に対して異なるタイルを持つようにして、車をタイルに留める方法を知ってください。

これは滑らかではありませんが、やりやすいことです。

2

カーブトラックが必要な場合、2つのベクトルの端点で指定された数学的に定義された曲線であるスプラインを使用できます。あなたは端点を下にして、それらの間の素敵な曲線を解きます。検索では、ソースコードに派生できるソースコードまたは数式が表示されます。これについての良い点は、パーセンテージ計算を行うことによって、あなたの車両の見出しを正確に解決できることと、あなたのパス上の次の位置を得ることができることです。難しいことは、各エンドポイントのセット間で同じ数のステップを必要としない場合は、カーブ長の計算を行う必要があることです。

別のアプローチでは、パスを1つのピクセル幅の曲線として描いた隠しビットマップを使用することができます。現在の位置を囲むピクセルを移動方向ベクトルに一致させ、各ステップでデルタ関数でベクトルを更新することによって、パス内の次の位置を見つけることができます。このアプローチは、「車両」がジョイスティックを使用してさまざまなパスに沿って「駆動」されているパスの移動プロトタイプに使用しました。ベクトル計算を混乱させる交差点があるまで問題なく動作します。しかし、単方向の閉ループであれば、これはうまくいくでしょう。実装するのは簡単ではありません。最後の数デルタを平均して、車両の進行方向を滑らかにすることができます。また、各ピクセルが1つの「ステップ」になり、速度コントロールが容易になります。

前者の場合、開始/停止の場所や関心のあるポイントに特別なタグ付きエンドポイントを付けることができます。後者では、特別なノードのパス上に異なる色のピクセルを使用するだけです。どちらの場合でも、あなたが表示するものは、おそらく基本的な経路データではなく、あなたの「公園」の表現を前提にしたものでしょう。

最も簡単なものを選んで、次のパスの場所に移動して車が動いているときに車両の見出しを更新するtick()関数を作成します。あなたが本当に賢いなら、あなたは半径ベースの衝突処理を行うことができます。そのため、トラック上の車が止まったときに車が自動的に停止します。

関連する問題