人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

線分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 のプログラムコードを教えてください。

●質問者: damia
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:BASIC XO XP コード プログラム
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● bluesy-k
●100ポイント

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.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ