円と直線の交点を求める
ちまちまと勉強中。
↓こちらのサイトにあったC言語用のものをActionScriptにベタ移植。ひとまず自分の使うと思われるものだけを移植させてもらいました。
幾何計算 % C言語ライブラリー
中の処理で何を行っているか理解できていない部分があります故、移植内容にバグがありましたらごめんなさい。
【 サンプルデモ 】
各点はドラッグ&ドロップが可能です。二点を通る直線と円との交点が表示されます。
【 ソースファイル 】
→Equationクラス
円と直線の交点を求める処理
→Equation.lineCrclCrsPtメソッド
【 使用例 】
//root.mc1 : 直線始点 //root.mc2 : 直線終点 //root.mc3 : 円の中心点用MC var CRCL_R:Number = 60; //円の半径 var pt1 :Object = { x:root.mc1._x, y:root.mc1._y }; var pt2 :Object = { x:root.mc2._x, y:root.mc2._y }; var line:Object = { pt1:pt1, pt2:pt2 }; var crcl:Object = { x:root.mc3._x, y:root.mc3._y, r:CRCL_R }; //円と直線の交点を取得 var data:Object = Equation.lineCrclCrsPt( crcl, line, pt1 ); if( data != null ){ trace( data.x + ":" + data.y + ":" + data.n ); }
引数はObject型で指定してあるのでご注意ください。引数の型や数の不正チェックをコンパイラーが行ってくれません。きちんとしたものにするならば、引数は全てObjectのプロパティには宣言せずNumber型にすべきでしょうか。
円と直線の交点は二つある場合があるので、その場合、三番目に指定した引数の位置に近い交点の座標を返します。サンプルデモでは、最初左上に表示される点に近い交点を求めるように設定してあります。
また、以前作成した二直線の交点座標を求めるメソッドも上記サイトの関数の内容へ変更しました。
→Equation.lineCrclCrsPtメソッド
デモで用いている円を描画するメソッドは、↓こちらのサイトにあったものを利用させていただきました。
描画メソッドで円を描く
→Equation.xDrawCircleメソッド