ここのところ必要に迫られて、いろいろ図形の描画をしました。で、前回のカスタム線に続いて、今度は外接円を描きました。サンプルはこちら。
円の公式(r*r = (x – a)* (x – a)+(x -b)*(x -b))と3点の座標から連立方程式を作って、解いただけです。…と書くと簡単そうですけど、ASの式にするのに結構手間がかかりました。数学苦手だし(笑)。スクリプトはこんな感じです。
//3点から円を描くfunction drawCircleFromPoint(){//任意の3点から円の半径、中心点を求める//(3点の座標と円の公式の連立方程式)var A:Number = Math.pow(point1.x,2) – Math.pow(point0.x,2) + Math.pow(point1.y,2) – Math.pow(point0.y,2);var B:Number = point1.y – point0.y;var C:Number = Math.pow(point2.x,2) – Math.pow(point0.x,2) + Math.pow(point2.y,2) – Math.pow(point0.y,2);var D:Number = point2.y – point0.y;var E:Number = point1.x – point0.x;var F:Number = point2.x – point0.x;var b:Number = (F*A – E*C)/(B*F – D*E)/2;var a:Number = (C – 2*b*D)/(2*F);var r:Number = Math.sqrt(Math.pow(point0.x – a,2) + Math.pow(point0.y – b,2));//求めた円を描画var sp_gr:Graphics = sp.graphics;sp_gr.clear();//円;sp_gr.lineStyle(1,0x00FF00,1);sp_gr.drawCircle(a,b,r);//中心点;sp_gr.moveTo(a-3,b-3);sp_gr.lineTo(a+3,b+3);sp_gr.moveTo(a-3,b+3);sp_gr.lineTo(a+3,b-3);}
※point0,point1,point2はそれぞれ円のmcを指します(サンプル参照)。
いざ書こうとすると意外と面倒なのでメモとして。あんまり用途がないかもしれませんけど…。