Top / 日記 / 20070502
/
20070502


20070502 設計・実装開始


開発環境インストール

Visual C# ExpressVisual C++ Expressをダウンロード・インストールします。
http://www.microsoft.com/japan/msdn/vstudio/express/default.aspx

SQL Server Express サーバはいらないです。
Webからインストールするんですが、とても時間がかかりました。

クラス設計

archg.png

無償で使えるUMLツールJUDEを使わせていただくことにします。
JUDE

サクサク作っていかないと。

パッケージGraphic.Misawa2D.Parts

とっかかりはグラフィックから。1つ1つのグラフィックパーツです。 2Dのパッケージ名は数字からはじめられないのでMisawa2Dで。。。
.NETのSystem.Drawingと同じクラス名だとまぎらわしいのでPrefix、M2Dを使います。これは某コーディング規約だけど、ここでは省略。

class_parts.png

.NET Frameworkに依存しないように書いてみました。C#Javaに少し似ているので、後でAppletにも移植してみようという野心があります。モデルベースで書いておけば、苦労せずにJavaに持っていけるかな。

パッケージGraphic.Misawa2D.Model

class_model.png

複数パーツを組み合わせてPathFinderを構成するクラスです。PathFinderの形状は今のところ1つだけです。

実装

3日かけて、Graphicパッケージ(とその周辺)の0版実装が終わりました。ふぅ。

  • 今回の教訓その1:マトリックス演算は
    Utilクラスの座標変換にはマトリックスを使いますが、これを.NETが持っているものを使うか、自分でマトリックス演算を書くか最後まで悩んだ末、自分で書くことに。なるべく、便利な関数に頼らないようにやろうという方針をかためました。Javan等、他プラットフォームに移植したいというのがねらいです。2Dの場合は2x2のいわゆる行列演算なのでまだ楽です。

    (x')=(cosθ -sinθ)(x)
    (y')(sinθ cosθ)(y)


こんな感じです。

//位置ベクトルの回転
public static M2DVector RotateVector(M2DVector srcVector, double degree)
{
    double radian = GetRadianByDegree(degree);

    M2DVector destVector = new M2DVector();
    destVector.U = (srcVector.U) * Math.Cos(radian) - (srcVector.V) * Math.Sin(radian);
    destVector.V = (srcVector.U) * Math.Sin(radian) + (srcVector.V) * Math.Cos(radian);

    return destVector;
}
  • 今回の教訓その2:プロパティを使うかどうか
    C#にはCOMの時代よろしくプロパティという概念があります。アクセッサをメソッドを合理的に扱うというものですが、これを使うと便利なんですが、また移植性が。。。これは、まだ結論を出さないことにします。今日のところは使ってしまいました。

    モデルベースといいつつも、コードそのまま流用ももくろんでいるのです。

    こんな感じです。
    public double U
    {
        set { this._relativeU = value; }
        get { return this._relativeU; }
    }
    public double V
    {
        set { this._relativeV = value; }
        get { return this._relativeV; }
    }

実行イメージ

デフォルメされたパスファインダーが動きました!

pathfinder0.gif


では、もう寝ます。


添付ファイル: filepathfinder0.gif 314件 [詳細] fileclass_model.png 318件 [詳細] filejude_banner0.png 302件 [詳細] filearchg.png 299件 [詳細] fileclass_parts.png 352件 [詳細]