線分ABと線分BCに接する円Rがあります。

Rが線分ABと接する点をP、Rが線分BCと接する点をQとします。
A,B,Cの座標(Xa,Yx),(Xb,Yb),(Xc,Yc)および円の半径(r)がわかっているとき、
点P,Qの座標(Xp,Yp),(Xq,Yq) 及び円R中心点Oの座標(Xo,Yo)を算出する、
なるべく短く汎用性の高い、C または BASIC のプログラムコードを教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/12/07 15:50:58
  • 終了:--

回答(1件)

id:bluesy-k No.1

bluesy-k回答回数17ベストアンサー獲得回数22005/12/07 22:23:13

ポイント100pt

http://www.hatena.ne.jp/1133938258#

人力検索はてな - 線分ABと線分BCに接する円Rがあります。 Rが線分ABと接する点をP、Rが線分BCと接する点をQとします。 A,B,Cの座標(Xa,Yx),(Xb,Yb),(Xc,Yc)および円の半径(..

#include <stdio.h>

#include <math.h>


void func(double A,double B,double C,double O, double P, double Q,double r)

{

//A[0]:Ax; A[1]=Ay;etc...

//A,B,C[] are for input

//O,P,Q[] are for output


double ba[2],bc[2],len_ba,len_bc;

double mid[2],len_mid;

double len_bo,len_bp;

int i;


for(i=0;i<2;i++){

ba[i]=A[i]-B[i];

bc[i]=C[i]-B[i];

}


len_ba=sqrt(ba[0]*ba[0]+ba[1]*ba[1]);

len_bc=sqrt(bc[0]*bc[0]+bc[1]*bc[1]);


for(i=0;i<2;i++){

ba[i]/=len_ba;

bc[i]/=len_bc;

mid[i]=(ba[i]+bc[i])/2;

}


len_mid=sqrt(mid[0]*mid[0]+mid[1]*mid[1]);


for(i=0;i<2;i++){

mid[i]/=len_mid;

}


len_bo=r/mid[1];

len_bp=len_bo*mid[0];


for(i=0;i<2;i++){

O[i]=B[i]+len_bo*mid[i];

P[i]=B[i]+len_bp*ba[i];

Q[i]=B[i]+len_bp*bc[i];

}

}


でどうでしょう。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません