記事一覧

トップ > プログラミング > C# > 矢印を書きたいだけ

矢印を書きたいだけ

最近学校の方で研究用の新システム作りを行っています。しかし、今まではJavaで書いていたのをフルスクラッチでC#で書き直しているのですが、JavaよりもC#の方が便利な関数が多くていいね。今日は、矢印を書けるようにしたいなー、と思って矢印を書けるようなWPFのプロパティを探していたのだけれども、どうもないみたいなので、微妙に自作しようと思ったら案外時間がかかった。
ちなみに、C#4.0+WPFで記述しているのでそのままではVS2008以降を持っていないと役に立たないかも?
thisはCanvasのサブクラスを指します。
コード


public void Arrow()
{
Path p = new Path();
p.Stroke = Brushes.LightSteelBlue;//線の色
p.StrokeThickness = 2;//線の太さ
LineGeometry l1 = new LineGeometry();//メインの線
LineGeometry l2 = new LineGeometry();
LineGeometry l3 = new LineGeometry();
l1.StartPoint = new Point(10, 10);//始点を適当に設定(実際には引数で渡す)
l1.EndPoint = new Point(-210, -210);//終点を適当に設定
double length = Math.Sqrt(Math.Pow(l1.EndPoint.X-l1.StartPoint.X,2)+Math.Pow(l1.EndPoint.Y-l1.EndPoint.Y,2));
l2.StartPoint = l1.EndPoint;
l3.StartPoint = l1.EndPoint;
double sita = Math.Atan2(l1.EndPoint.Y-l1.StartPoint.Y,l1.EndPoint.X-l1.StartPoint.X);
l2.EndPoint = new Point(l1.EndPoint.X - length / 10.0 * Math.Cos(sita + Math.PI / 4), l1.EndPoint.Y - length / 10.0 * Math.Sin(sita + Math.PI / 4));//Math.PI/4は線の角度を45度にするということ。
l3.EndPoint = new Point(l1.EndPoint.X - length / 10.0 * Math.Cos(sita - Math.PI / 4), l1.EndPoint.Y - length / 10.0 * Math.Sin(sita - Math.PI / 4));
GeometryGroup g = new GeometryGroup();
g.Children.Add(l1);
g.Children.Add(l2);
g.Children.Add(l3);
p.Data = g;
this.Children.Add(p);

}

....      \
------------>
. ...     /
     
      ↑ここの座標ってどうやって求めればいいんだという話。

ちょっと考えれば簡単だったのに・・・
こういうGeometry系の計算は何度やっても苦手だ・・・。数学をもっと勉強するべきだったなぁ。

トラックバック一覧

コメント一覧

YU 2010年06月15日(火)23時16分 編集・削除

てっきり弾幕でも作ってたと思ったら研究だったとは……恐るべし因果応報

うえち 2010年06月16日(水)05時29分 編集・削除

東本さんとか佐々木さんがそのプログラム作っていたのに……(Javaだけど)
全く引き継がれてねえw

ingaouhou 2010年06月24日(木)17時58分 編集・削除

>YU
弾幕はパワーだ!
>うえち
どちらかといえば、C#でも作れるライブラリ的なのを残せればと思ってコードを書いていたりwwwww