- 2008-12-09 (火) 9:19
- Study
点と点の距離や中点をとる場合などに、Point型をPointF型に簡単に変換できたら便利。そのためのメソッドは、こんな感じになるだろう。
public PointF PointToPointF(Point p)
{
return new PointF((float)p.X, (float)p.Y);
}
けど、こんなメソッドが増えてくると、なんだか全体のコードの見通しが悪くなって気持ち悪い。ユーティリティー系メソッドを別ファイルにしてまとめておくというのもアリだが、PointToPointF() という名前がなんともはや(Delphi ならこれでもいい気がするけど)。
できれば、i.ToString() みたいに p.ToPointF() なんて書ければいいのだが。
C#3.0 なら拡張メソッドを使うことで、簡単に(継承を使わずに)既存のクラスへ新しいメソッドを付け加えることが出来るらしい。
public static class PointClassExtension
{
public static PointF ToPointF(this Point p)
{
return new PointF((float)p.X, (float)p.Y);
}
public static double DistanceFrom(this Point p1, PointF p2)
{
return Math.Sqrt(
Math.Pow((float)p1.X - p2.X, 2) +
Math.Pow((float)p1.Y - p2.Y, 2));
}
}
static を使うんですね。なんかあんまりイケてない記法な気もするけど、これでp.ToPointF() という書き方が出来る。Rubyチックな感じ(ほかのスクリプト言語もそうなんだろうか?少なくとも Javascript でもできるなぁ)。ここではついでに、2点間の距離を求めるメソッドも加えてみた。p.DistanceFrom(anotherP) で p と anotherP 間の距離が返ってくる。オーバーロードしてPoint型をとれるようにしてもよさげ。
PS:
float と int の加算減算って float型で返ってくるんだっけ?こういうところ、ちょっと分かってないので不安だったりする。
- Newer: 最近ちょっと溜まってるのでさらけ出してしまうが…
- Older: Q. 西遊記の三蔵法師のお供は何人(何匹)!?

