ともさんのHP >プロブラミング >JAVAで幾何計算 >JAVAで3点円

JAVAで3点円を求める

JAVA(コンピュータ言語)で3点を通る円を求めるメソッドの紹介です。
3点円の描画

円の中心点を算出する方法

恥ずかしいけど理解していない。ネットで拾った計算式をそのまま使いました。
こちら を参考にさせていただきました。ありがとうございました。
この計算式だと、X,Y座標ともに符号が無くなっています。
そこで、x座標とy座標それぞれについて3点との距離を計算し、3つとも同じ距離(半径です)になった符号の組み合わせを選びとるようにしました。
距離の計算結果はdoubleだと微妙に違うのでintに変換してから比較しています。
xとyの符号の組み合わせは4つ。4回計算しますが、3つとも同じであれば、その時点で計算を終了します。

広告

3点円を求めるJAVAメソッド

3つをpointを入力してCircleクラスを得ます。
PointはXY座標を格納する簡単なクラス
Circleは中心点と半径、描画の開始/終了角度を格納する簡単なクラスです。

public Circle sanTenEn( tomojavalib.p2cad.Point p1, tomojavalib.p2cad.Point p2,tomojavalib.p2cad.Point p3)
{
Circle c = new Circle();

double G=( p2.y*p1.x-p1.y*p2.x +p3.y*p2.x-p2.y*p3.x +p1.y*p3.x-p3.y*p1.x );
if(G==0.){c=null;return c;}
c.p.x = ((p1.x*p1.x+p1.y*p1.y)*(p2.y-p3.y)+(p2.x*p2.x+p2.y*p2.y)*(p3.y-p1.y)+(p3.x*p3.x+p3.y*p3.y)*(p1.y-p2.y) )/ ( 2.0 * G );
c.p.y = ((p1.x*p1.x+p1.y*p1.y)*(p2.x-p3.x)+(p2.x*p2.x+p2.y*p2.y)*(p3.x-p1.x)+(p3.x*p3.x+p3.y*p3.y)*(p1.x-p2.x) )/ ( 2.0 * G );
//xy符号のチェック
for(int ii=0;ii<4;ii++)
{
if(ii==1){ c.p.y = -c.p.y ; }
if(ii==2){ c.p.x=-c.p.x ; c.p.y = -c.p.y ; }
if(ii==3){ c.p.y = -c.p.y ; }
int r1 =(int)Math.sqrt((c.p.x-p1.x)*(c.p.x-p1.x)+(c.p.y-p1.y)*(c.p.y-p1.y));
int r2 =(int)Math.sqrt((c.p.x-p2.x)*(c.p.x-p2.x)+(c.p.y-p2.y)*(c.p.y-p2.y));
int r3 =(int)Math.sqrt((c.p.x-p3.x)*(c.p.x-p3.x)+(c.p.y-p3.y)*(c.p.y-p3.y));
if(r1==r2){if(r2==r3){break; }}
}
//半径を求める
c.r = Math.sqrt((c.p.x-p1.x)*(c.p.x-p1.x)+(c.p.y-p1.y)*(c.p.y-p1.y));
//円の開始角度
c.sangle=0.;
//円の終了角度
c.eangle=360.;
return c;
}

最終更新日: 2014-04-03 21:00:00

ともさんのHP >プロブラミング >JAVAで幾何計算 >JAVAで3点円

このエントリーをはてなブックマークに追加
広告
おすすめ記事
新着ページ

昔の玩具の作りかた  
渋柿で柿渋作り  
ダンゴムシの飼い方  
新旧文化式とドレメ式原型製図を比較  
萩の栽培、手入れ、増やしかた  
エアコンを使わなくても涼しい私の家  
合コン  
ウエストポーチを作りました  
ミシンでボタンを付ける  
ブログの住人  
ヒバカリの飼育  

私の他のサイト

ともさんの箱庭(ブログ)
家庭菜園
3D-CAD
洋裁CAD

いいねなど

 RSS 

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます