×

[PR]この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。

2次元ランダムウォーク  (Silverlight)

(x,y)にある点(このプログラムでは赤)の次の位置は、(x+1,y) (x-1,y) (x,y+1) (x,y-1)のいずれかで、それぞれが、1/4の確率である場合の動きを可視化するプログラムです。軌跡はグレーで示しています。
参照:Wikipedia 「ランダムウォーク」


Silverlight3からサポートされたWritableBitmapクラスを使い、点を描画しています。
実際に描画するエリアの縦横幅の1/2のサイズのWritableBitmapを用意し、Silverlightの機能を使い、イメージを自動拡大させています。軌跡が細い線で描けないのはその手抜きのせいです。
Silverlightでは、WindowsFormsとは異なりPaintイベントがありません。WriteableBitmapの内容を画面に反映させたい場合は、Invalidateメソッドを呼ぶだけです。ただ、UIスレッドでしか、WritableBitmapにアクセスできません。このプログラムでは、ひとつの点しか動かしていませんが、スレッドを使い複数の点を動かす場合には、注意する必要があります。

なお、WriteableBitmapには、SetPixelという点を描画するメソッドが用意されていないので、WriteableBitmapExtentionクラスで、SetPixel拡張メソッドを定義しています。

DispatcherTimerクラスは、WindowsFormsのTimerクラスに該当するもので、一定時間おきに、指定したメソッドを呼び出せます。 UI と同じスレッドで動きますので、WriteableBitmapにアクセスできます。

■page.xaml.cs
 
■page.xaml