日記/20070502 の変更点


|[[''前の日記''>日記/20070429]]|[[''次の日記''>日記/20070504]]|
~
これは4月30日〜5月2日までの出来事である(24風w)。~
*20070502 設計・実装開始 [#s23535b5]
~
**開発環境インストール [#l9d870f5]
''Visual C# Express''と''Visual C++ Express''をダウンロード・インストールします。~
http://www.microsoft.com/japan/msdn/vstudio/express/default.aspx

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

**クラス設計 [#raaa1507]
#ref(archg.png,nolink);
とりあえず、''お絵かき''では限界があるので、''優良''なのに''無償''で使えるUMLツール''JUDE''を使わせていただくことにします。~
''無償''で使えるUMLツール''JUDE''を使わせていただくことにします。~
[[&ref(jude_banner0.png,nolink,JUDE);>http://jude.change-vision.com/jude-web/index.html]] 
~
~
サクサク作っていかないと。。(^^;)~
サクサク作っていかないと。~
~
***パッケージGraphic.Misawa2D.Parts [#o314ff1b]
とっかかりはグラフィックから。1つ1つのグラフィックパーツです。
2Dのパッケージ名は数字からはじめられないので''Misawa2D''で。。。~
.NETのSystem.Drawingと同じクラス名だとまぎらわしいのでPrefix、M2Dを使います。これは某コーディング規約なんですが、ここでは省略します。どっかでとりあげられれば取り上げてみたいと思います。~
.NETのSystem.Drawingと同じクラス名だとまぎらわしいのでPrefix、M2Dを使います。これは某コーディング規約だけど、ここでは省略。~

#ref(class_parts.png,nolink);
.NET Frameworkに依存しないように書いてみました。''C#''は''Java''に似ているので、後で''Applet''にも移植してみようという野心があります。JUDEでモデルベースで書いておけば、苦労せずにJavaに持っていけるかなー、と淡い期待があります。~
.NET Frameworkに依存しないように書いてみました。''C#''は''Java''に少し似ているので、後で''Applet''にも移植してみようという野心があります。モデルベースで書いておけば、苦労せずにJavaに持っていけるかな。~

***パッケージGraphic.Misawa2D.Model [#f4b24920]
#ref(class_model.png,nolink);
複数パーツを組み合わせてPathFinderを構成するクラスです。PathFinderの形状は今のところ1つだけです。~

**実装 [#c6c62027]
&size(20){''3日かけて、Graphicパッケージ(とその周辺)の0版実装が終わりました。''ふぅ。};~
-''今回の教訓その1:マトリックス演算は''~
Utilクラスの座標変換にはマトリックスを使いますが、これを.NETが持っているものを使うか、自分でマトリックス演算を書くか最後まで悩んだ末、自分で書くことに。なるべく、便利な関数に頼らないようにやろうという方針をかためました。他に移植したいというのが目的です。2Dの場合は2x2のいわゆる行列演算なのでまだ楽です。~
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; }
 }
**実行イメージ [#p30ad351]
デフォルメされたパスファインダーが動きました!~
#ref(pathfinder0.gif,nolink);
~
では、もう寝ます。
~
|[[''前の日記''>日記/20070429]]|[[''次の日記''>日記/20070504]]|
~