ソフトウェア開発における数学的な計算処理

ソフトウェアを開発するにあたり、
数学的な計算処理は無くてはならないものです。
特にグラフィックス・画像処理などでは、それ無しには語れないほど重要なもの
だったりします。
(もちろん他にも数学的な計算が必要なケースは山ほどあります)
昨今では
UI(ユーザーインタフェース)のフレームワークがそれらの処理を内部的に行ってくれることが増えたので、一般的なアプリケーションの開発者にはあまり馴染みが無かったりする場合もありますが、
ちょっと変則的なことを実現したかったり、細かいユーザーニーズに応えたい時に
どうしても数学的なことを考えざるを得なくなることはそれ程珍しいことではありません。
今日は、簡単に使えてそれなりに応用範囲の広いシンプルな計算処理を紹介したいと思います。
どれも数学的には理解しやすい部類に入るかと思います。
言語はC#を使用しています。必要に応じてそれぞれの言語に読み替えてください。
(1)距離を計算する(ピタゴラスの定理を使用)
double Distance(Point a, Point b) { var xDistance = b.X - a.X; var yDistance = b.Y - a.Y; return Math.Sqrt((xDistance * xDistance) + (yDistance * yDistance)); }
[応用例]
・直線を繋いで表現された疑似的な曲線の長さを求める
・2つの物体の当たり判定
(2)2点間の任意の中間地点を計算する(線形補間)
Point InterpolatedPoint(Point a, Point b, double t) { var xDistance = b.X - a.X; var yDistance = b.Y - a.Y; return new Point(a.X + (xDistance * t), a.Y + (yDistance * t)); // "t"は補間係数。0~1の範囲で、1に近付くほど頂点bの座標に近付く }
[応用例]
・折れ線グラフのデータ1とデータ2の中間値を求める
・直線abを複数の直線に分割する
(3)直線の角度を計算する
double VectorDirection(Point a, Point b) { var width = b.X - a.X; var height = b.Y - a.Y; var angle = Math.Atan2(height, width) * 180.0 / Math.PI; var result = (angle < 0.0) ? (360.0 + angle) : angle; return result; // 時計回りに0以上360未満の値 }
[応用例]
・曲線のおおよその向きを計算する
上記で紹介した計算処理は
数学的な処理の入り口のような基礎的なものばかりです。
これらを組み合わせるだけでも実に様々なことが実現できるようになります。
事実、これ+αの数学的知識だけで難しいアプリケーション開発を乗り切った
こともありました。
頭の体操に、他にどんな処理があるかを調べてみるのも良いかもしれませんね。
ホームページ http://www.ois-yokohama.co.jp
facebook https://www.facebook.com/orientalinformationservice/