2011-01-08 5 views
0

私は移動ロボットを制御するプログラムを作成しています。ロボットが感知するように "世界"の地図を描き、それを感知しながら地図に変化を適用することがその作業の1つです。 また、ロボットの位置と(理想的には)それが指す方向を何らかの形で強調表示する必要があります。配列に基づいた地図を描画し、実行時の変更を適用する

私は現在、マップを表す自動更新配列(100 x150)を次の表現を使用しています:0はクリアパスを表し、1は障害物を表します。 私には、ロボットの場所と次の場所を含む変数もあります。

私が必要とするのは、それを視覚化することです。私はラベルを使うことを考えましたが、使い方が面倒すぎて、最終結果がそれほど美しくありません。私の他の可能性は、すべてのデータをExcelのスプレッドシートに書き込むことですが、それから私は正方形に戻っていきます。魅力的な方法でデータを視覚化することです。仕事をすることができる何らかの種類の図面パッケージがありますか?

を使用する:それを合計するには

- int[] MapArray //100 x 150 array representing the robot's world, and the data there is changing. 

- Point[] Locations //Locations[0] is the current location, Locations[1] is the next step. 

をそして私は素敵な視覚的な方法で自分自身を更新し、Windowsフォームアプリケーションに地図を描きたいです。

私の質問が十分に明確であることを願っていますが、私に連絡することを躊躇しないでください!

+0

最後に、私はsemyonの提案を使用しました。私は今使っているZedGraphというグラフパッケージを見つけました。 助けてくれてありがとう! – Yarok

答えて

0

お試しCode: Drawing a Filled Rectangle on a Form (Visual C#)または類似のものを使用してください。

Graphics Programming Example Topics


だけで、アレイのすべてのセルにアクセスし、COORDSに応じて、フォーム上の四角形を描画サイクルのカップル書く - それは最も簡単な方法ですが。

for(int i=0; i<100; i++) 
{ 
    for(int j=0;j<150;j++) 
    { 
     <access[i,j] and draw a rectangle with color accordingly to your contents.> 
    } 
} 

描画位置も同じです。

0

素晴らしいコントロールが見つからない場合、いつも正方形のセルが表示されるように、列幅=行の高さでDataGridViewを使用できます。その後、障害物の背景色を変更するだけです。

グリッドがタイマーではなくイベントに基づいて更新されるように、マップ配列の観測可能なコレクションを調べることもできます。 Cellを追加/削除するときだけでなく、セルがその値を変更した場合でも、Observableコレクションを上書きしてCollectionChangedイベントを送信するようにしてください。

+0

ねえ、ありがとう!私は以前に観察可能なコレクションで作業したことはありません。このケースではどのように実装しますか? – Yarok

関連する問題