■default ---■fontsize --70% --80% --100% --120% --140% --- --■scroll_switch

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

javascript 3点から円の中心と半径を求める

//3点から円の中心と半径を求める array[[x,y],r] = point3_to_circle_pv( ar = [[x,y],[x,y],[x,y]]);
function point3_to_circle_pv(ar){
if( !span_2point ([ar[0],ar[1]]) || !span_2point ([ar[0],ar[2]]) || !span_2point ([ar[1],ar[2]])){return false ;}
var n = [ (ar[1][0] - ar[0][0]) ,(ar[1][1] - ar[0][1]),(ar[2][0] - ar[0][0] ),(ar[2][1] - ar[0][1]) ] ;
var x = ar[0][0] + (pow_and_plus_2num ([n[0],n[1]]) * n[3] - pow_and_plus_2num ([n[2],n[3]]) * n[1] ) / (n[0] * n[3] - n[1] * n[2]) / 2 ;
var y = (n[1]) ? (n[0] * ( (ar[0][0] + ar[1][0] ) - (x * 2 )) + ( ar[1][1] + ar[0][1] ) * n[1] ) / n[1] / 2 : (n[2] * ( ( ar[0][0] + ar[2][0] ) - (x * 2 )) + ( ar[2][1] + ar[0][1] ) * n[3] ) / n[3] / 2 ;
var r = average_of_ary ( [span_2point ([[x,y],ar[0]]) , span_2point ([[x,y],ar[1]]) ,span_2point ([[x,y],ar[2]]) ]) ;
return [[x,y],r] ;
}
//////////////////////////////////////////////////////////////////////////////
//2点間の距離[[x,y],[x,y]]
function span_2point (xy){return Math.sqrt( pow_and_plus_2point (xy) );}
function pow_and_plus_2point (xy){return pow_and_plus_2num ([(xy[0][0] - xy[1][0]) , (xy[0][1] - xy[1][1]) ]) ;}
function pow_and_plus_2num (ab){return Math.pow(ab[0],2) + Math.pow(ab[1],2) ;}
//数値配列の平均
function average_of_ary(ar) {var ans = 0;for (var i in ar ) {ans += ar[i];}return (ans / ar.length);}

//↓こんな感じでつかう
var ten3 = [[-1,1],[1,1],[1,-1]];
var answer = point3_to_circle_pv(ten3 );


こねくり回しているうちに自分でも何で動くかよく分からなくなったけど、答えはあっているっぽい。
スポンサーサイト
ブログ内検索ワード
マジック / フラリッシュ / デザイン / ~のコツ / プログラム関連 /
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。