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 のプログラムコードを教えてください。
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];
}
}
でどうでしょう。
コメント(0件)