2点と半径から円の中心座標を求める
ごく普通に解いてみる
2点と半径で円の中心が決まるのはごく簡単です。
こんな感じですね。

さて、当然の事ながら2次方程式の解ですので答えは最大2つ出てきます。

上図が一つの答えですが、この2点を通る中心位置が違う円がもうひとつあるのはすぐわかりますね。

上図のようになります。
プログラム
今回は簡単ですね。すぐプログラムを書いてみましょう、
ポイントは与えられた2点の中間点P3を求めて、そこからの差分で2つの中心点を求めているところです。
typedef struct {
FPOINT pc ;
double r ;
} FCIRCLE ;
//---------------------------------------------------------------------------------------------
//
// 2点と半径から円の中心座標を求める
//
//---------------------------------------------------------------------------------------------
int geoGetCircleOf2PTAndR(
FPOINT pt1, // 円上の第1点
FPOINT pt2, // 円上の第2点
double r, // 円の半径
FPOINT *pc1, // 第1円の中心
FPOINT *pc2) // 第2円の中心
{
int stat = 0 ;
FPOINT pt3 ;
double d, l1, dx, dy ;
pt3.x = (pt1.x + pt2.x) * 0.5 ;
pt3.y = (pt1.y + pt2.y) * 0.5 ;
r *= r ;
l1 = (pt2.x - pt3.x) * (pt2.x - pt3.x) + (pt2.y - pt3.y) * (pt2.y - pt3.y) ;
if (r >= l1) {
d = sqrt(r / l1 - 1.0) ;
dx = d * (pt2.y - pt3.y) ;
dy = d * (pt2.x - pt3.x) ;
pc1->x = pt3.x + dx ;
pc1->y = pt3.y - dy ;
pc2->x = pt3.x - dx ;
pc2->y = pt3.y + dy ;
} else {
stat = 1 ;
}
return stat;
}
-
C, 交点・接線, 図形, 計算