2つの円に接する線の接点の座標が知りたいです。
円の半径、中心座標はわかります。
どういう式にすれば出るのでしょうか?

数学はまったくわからないので、簡単な式でできるだけお願いします。

A 回答 (4件)

図形で考えるとちょっとらくかも。



(1)2つの円の中心を結ぶ直線qを考えます。

(2)求める接線はこの線に対して鏡写しのものがあるので
本質的には2つみつければよいことがわかると思います。
その二つの線をa,bとします。

(3)qとa,bの交点をA、Bとして、
接点と中心とA,Bがそれぞれつくる3角形を考えれば
その3角形が相似であることがわかります。

(4)(3)は円の間の距離は決まっているので
3角形の相似の関係から
交点A,Bがきまる(それぞれの中心からの距離が決まる)
ということを意味しています。

(5)ところで今考えている3角形は直角三角形なので
半径と中心からA、Bまでの距離が決まれば
3角形の形がきまります
(というか、接点が円の中心からどの方向にあるか決まります。)

定規とコンパスで作図できると思いますが、
数値的に求めたい場合は、比の計算と、
三角関数(逆関数)を計算する必要があります。
(関数電卓があれば簡単にできると思います。)
    • good
    • 1

No.1のymmasayanです。



> 円同士は近くにあります。円と円にクロスした接線にはなりません。
(4本ってそういうことですか?)

そうです。接したり重なったりしていなければどんなに近くても4本出来てしまいます。

> 円Aから円Bは、45度くらいの斜め上にあると考えて、円の上の方を接線が通るとしたらできますか?

どういう位置関係にあっても同じです。No.2の方が回答されているように、結構複雑な計算が必要です。
    • good
    • 0
この回答へのお礼

あ、そうですね。4本だ。

でもやらなくてはいけないので、複雑でもがんばります!
ありがとうございます。

お礼日時:2002/03/06 13:35

中心(a,b)、半径rの円の方程式および中心(c,d)、半径sの円の方程式は


(x-a)^2+(y-b)^2 = r^2 …(1)
(x-c)^2+(y-d)^2 = s^2 …(2)
となりますね。(a,b,r,c,d,sはすべて実数)、
直線の式を y = px+q (p,qは実数、y軸と平行の場合は別に考える)として、
(1)と(2)の式に代入して変形すると
(p^2+1)x^2 + 2(q-b-a)x + a^2+(q-b)^2-r^2 = 0 …(3)
(p^2+1)x^2 + 2(q-d-c)x + c^2+(q-d)^2-s^2 = 0 …(4)
となって、(3)と(4)の2次方程式がともに重解を持つから、各々の判別式 = 0
とすれば、pとqの連立2次方程式となり、pとqの組が求められます。
※2つの円の位置により、pとqが0~4通りの組み合わせとなります。
求めたpとqを(3)または(4)に代入して、2次方程式の解を求めて、
直線の式に代入すれば、接点の座標が求められます。

この回答への補足

回答ありがとうございます。
2次方程式はいつか習ったような・・
ですが、解き方がわかりません・・

せっかく教えていただいたので勉強します。

補足日時:2002/03/06 13:28
    • good
    • 0

直接の答えでなくてごめんなさい。


簡単な式で説明するのは結構難しそうです。
2つのエンがかなり離れていれば、条件に合う接線は4本も引けてしまいます。
と言う事はなかなか厄介です。

この回答への補足

円同士は近くにあります。円と円にクロスした接線にはなりません。
(4本ってそういうことですか?)

円Aから円Bは、45度くらいの斜め上にあると考えて、円の上の方を接線が通る
としたらできますか?

補足日時:2002/03/05 23:31
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q2本の線に内接する円の中心を教えて下さい。

製造業に携わっていますが、
図面では2本線の交点のみ寸法が書かれている場合が多く、
内接する円の中心座標が分かりません。

添付画像のような感じなのですが、
この場合の円の中心位置を求めるにはどうすれば良いでしょうか?

また、この2本の線の交点の呼び名は何というのでしょうか?

Aベストアンサー

 
こうすれば判りませんが?
角 a と角 b は同じ角度ですよね
円の半径をrとすれば
Y方向の座標はr
X方向は
30-(r×tan(90-a))
 

Q2円(円弧)に接する内接円の中心座標の求め方

2円(円弧)に接する内接円の中心座標の計算式をどなたか教えてください。例・A円-R225.0_中心座標(X0.0Y-156.3) B円-R70.0_中心座標(X20.0Y0.0) C円-R30.0の場合の計算式を教えてください。
上記、例ですと内接するC円は、2個できます。賢くないのでできる限り分かりやすく教えてください。

Aベストアンサー

No.2です。
ちょっと間違えてしまいました。
x1,y1,r1は円A'、
x2,y2,r2は円B'のパラメータです。
後はそのままです。

Q弦の長さを求める公式は?

半径 r の円があり、
 円周上に 2点 A と B があるとします。

AとBの中心角が分かっている時、
 AとBを結ぶ「弦」の長さを求める公式は存在しますか?

Aベストアンサー

#2です。
見事に読み間違えてしまいすみません。
θ(中心角)の単位をラジアン、半径rとすると、弦の長さLは他の回答者さんがおっしゃるとおり
L=2r×sin(θ/2)
となります。

θの単位が度(°)だった場合は、
L=2r×sin(πθ/360)
となります。

いずれの場合も、θはどんな値でもかまいません。
中途半端な角度でも等式は成り立ちますが、中途半端な角度のsinの値を求めるのは大変なので、関数電卓やsinの値の表を使ってください。

Q2つの円の共通外接線の線分を求める公式は?

 点(x1, y1)を中心とする半径Lの円と、点(x2, y2)を中心とする半径Sの円の間で引くことのできる、共通外接線の1次式(y = ax + b)を求める公式を知りたいのです。おそらく高校数学の参考書に載っているレベルだろうとは思うので、ご存じの方がおられましたらご教示願います。

 なお、計算式はコンピュータプログラムで使う(つまり学習目的ではない)ため、面倒であれば解く課程は省略していただいても構いません。

Aベストアンサー

たぶん一番簡単だと思われる方法は、共通外接線って二本引けるんですが、その交点を調べる方法なんですね。実は二つの円の半径が等しくない限り(等しい場合は二円の中心を結ぶ線分に平行な直線が共通外接線になります)、共通外接線は二円の中心を半径の比に外分する点で必ず交わります。同様に、共通内接線は必ず二円の中心を半径の比に内分する点で交わります。こういった事実を知っていると次のように解くことができます。

二円の中心を半径の比に外分する点を求める。その点を通る直線の式を傾きmとおいて出しておく。点と直線の距離の公式を使って、いま求めたmの入った直線と円の中心との距離が、円の半径と等しくなるようにmを求める(どちらの円でやってもよいです)。そうするとおしまい。最後のところは、判別式=0とやってもよいですが、♯1さまも書かれている通り、円と直線が接する条件は点と直線の距離の公式を使うのが受験生の常道です。でもコンピュータに解かすなら判別式でもどちらでもよいとはおもいますけれど。

Q直線と円に接する円の中心座標

直線と円に接する円の中心座標を求める方法がわからなく困っています。どなたかご存知の方いませんか。

円の半径 R12.2(中心座標X-9.3, Y48.527)
直線   (X0, Y10.15)を始点として95度
接円   R17.3 ← この円の中心座標が知りたいです。

Aベストアンサー

#1です。補足ありがとうございます。

>Y軸に対して95度です。(X0, Y10.15)を通る左上がりの直線です。

書いておられる図はX軸に対して95度のようですね。これを元に書いていきます。
#1で書いたように元の円に接する円の中心の集合は(#2さんも書いておられるように)
中心X-9.3, Y48.527、半径(12.2+17.3)です。
式で書くと

(X+9.3)^2+(Y-48.527)^2=29.5^2=870.25

また、元の直線と距離が17.3の線が通る点としては(0,10.15)を通り、
元の直線に垂直な線を考え、それで17.3をとると

x=±cos(5°)*17.3=±17.234
y=10.15±sin(5°)*17.3=11.658、8.642

また、tan(95°)=-11.43

ということで

(X+9.3)^2+(Y-48.527)^2=870.25



Y=-11.43*(X-17.234)+11.658

もしくは

Y=-11.43*(X+17.234)+8.642

の交点になります。最大4点あります。(元の円と直線が交わってますので)
とりあえず、第一象限にくるのが(12.245,68.682)、第二象限にくるのが
(-18.265,20.422)だと思います。(検算してください。手抜きでExcelに
計算させました。)

#1です。補足ありがとうございます。

>Y軸に対して95度です。(X0, Y10.15)を通る左上がりの直線です。

書いておられる図はX軸に対して95度のようですね。これを元に書いていきます。
#1で書いたように元の円に接する円の中心の集合は(#2さんも書いておられるように)
中心X-9.3, Y48.527、半径(12.2+17.3)です。
式で書くと

(X+9.3)^2+(Y-48.527)^2=29.5^2=870.25

また、元の直線と距離が17.3の線が通る点としては(0,10.15)を通り、
元の直線に垂直な線を考え、それで17.3をとると

x=±cos(5...続きを読む

Q三角形の外接円の中心座標を求めるプログラム

三点の座標(x1,y1),(x2,y2),(x3,y3)が与えられたときに、三角形の外接円の中心座標と半径を求めるプログラムが欲しいです。

垂直二等分線の交点を求めるやり方は既に知っているのですが、連立方程式になってしまいます。
ですので出来ればこれを一発で求められる連立じゃない式が欲しいのですが、ご存じないでしょうか?

x = 何とか
y = 何とか
みたいな感じです。

Javaでやろうとしていますが、計算式さえわかれば自分で書けると思うので、中心座標のx,yを求める式を教えて下さい。

過去質問を探してみましたが、みんな連立方程式で解けば良いとおっしゃっていまして…

Aベストアンサー

地道に解いた結果をもちいれば良いと思います。
中心を(p,q)とおくと

(x-p)^2+(y-q)^2=R^2
に(x1,y1),(x2,y2),(x3,y3)を代入して
(x1-p)^2+(y1-q)^2=R^2 (1)
(x2-p)^2+(y2-q)^2=R^2 (2)
(x3-p)^2+(y3-q)^2=R^2 (3)

(1)-(2)
(x1-p)^2-(x2-p)^2+(y1-q)^2-(y2-q)^2=0
(x1-x2)(x1+x2-2p) + (y1-y2)(y1+y2-2q)=0
-2(x1-x2)p -2(y1-y2)q +x1^2 -x2^2 +y1^2 -y2^2 =0

(1)-(3)
-2(x1-x3)p -2(y1-y3)q +x1^2 -x3^2 +y1^2 -y3^2 =0


p = {(y1-y3)(y1^2 -y2^2 +x1^2 -x2^2) +(y1-y2)(y1^2 -y3^2 +x1^2 -x3^2)} / {2(y1-y3)(x1-x2)+2(y1-y2)(x1-x3)}

q = {(x1-x3)(x1^2 -x2^2 +y1^2 -y2^2) +(x1-x2)(x1^2 -x3^2 +y1^2 -y3^2)} / {2(x1-x3)(y1-y2)+2(x1-x2)(y1-y3)}


とかなり複雑な式になりました。
計算がどこかで間違っているかもしれませんが、残念ながらあまり美しくはなりませんね。

地道に解いた結果をもちいれば良いと思います。
中心を(p,q)とおくと

(x-p)^2+(y-q)^2=R^2
に(x1,y1),(x2,y2),(x3,y3)を代入して
(x1-p)^2+(y1-q)^2=R^2 (1)
(x2-p)^2+(y2-q)^2=R^2 (2)
(x3-p)^2+(y3-q)^2=R^2 (3)

(1)-(2)
(x1-p)^2-(x2-p)^2+(y1-q)^2-(y2-q)^2=0
(x1-x2)(x1+x2-2p) + (y1-y2)(y1+y2-2q)=0
-2(x1-x2)p -2(y1-y2)q +x1^2 -x2^2 +y1^2 -y2^2 =0

(1)-(3)
-2(x1-x3)p -2(y1-y3)q +x1^2 -x3^2 +y1^2 -y3^2 =0


p = {(y1-y3)(y1^2 -y2^2 +x1^2 -x2^2) +(y1-y2)(y1^2 -y3^2 +x1^2 -x3^2)} / {2(y1...続きを読む

Q二点の座標から角度を求めるには?

2点の座標A,Bの角度を求めたいのですが,たとえばA点(0,0)とB点(4,3)を結ぶラインは、底辺Bxと高さByを元に三角関数?から30度と求められますが、B点がマイナス座標が絡んできた場合などの90度から359度までをどう求めていいか悩んでいます。また、A点も(0,0)に限定されるわけではないので、ますます混乱しています。どう考えればよいのか教えていただきたいのですが
(水平はX軸プラス方向が0度です)

Aベストアンサー

>2点の座標A,Bの角度を求めたい~・・・・

このままなら答えは0ですけど?

xy座標で、x軸のプラス方向を0度とし、
2点の座標A、Bにより形成される線ABとx軸との角度
ってことですね。

>たとえばA点(0,0)とB点(4,3)を結ぶラインは、底辺Bxと高さByを
>元に三角関数?から30度と求められますが、

sen-senさんの書かれたとおり、これは間違いです。
この場合、Bからx軸へのばした垂線とx軸との交点をCとすると、
三角形ABCができ、そのときの求めたい角度をθとすると、
tanθ=3/4となります。
よって、θ=36.8698...
となります。

>B点がマイナス座標が絡んできた場合などの90度から359度までを
>どう求めていいか悩んでいます。また、A点も(0,0)に限定される
>わけではないので、ますます混乱しています。
>(水平はX軸プラス方向が0度です)

常にx軸のプラス方向が0度でしたら、
1.第一象限にある場合は90度足す。
2.第二象限にある場合はそのまま。
3.第三象限にある場合は270度足す。
4.第四象限にある場合は180度足す。
とすればいいのでは?

簡単な例として、x軸と点A(0,5)と点B(-3,7)によって形成される
線ABとの間の角度は・・・・

まず、図を描いてみると点Bは第一象限にあるので、
最後に求めた角度に90度足せばいいだけです。
さっきと同じように直角三角形を作成します。
すると点Cの座標は(0,7)となります。
辺ABと辺ACとの間の角度は、tanθ=3/2
θ=56.3
以上より、x軸(に水平な線)と線ABとの間の角度は146.3度となります。

こんな感じでいいのでは?

>2点の座標A,Bの角度を求めたい~・・・・

このままなら答えは0ですけど?

xy座標で、x軸のプラス方向を0度とし、
2点の座標A、Bにより形成される線ABとx軸との角度
ってことですね。

>たとえばA点(0,0)とB点(4,3)を結ぶラインは、底辺Bxと高さByを
>元に三角関数?から30度と求められますが、

sen-senさんの書かれたとおり、これは間違いです。
この場合、Bからx軸へのばした垂線とx軸との交点をCとすると、
三角形ABCができ、そのときの求めたい角度をθとすると、
tanθ=3/4...続きを読む

Qタンジェントとアークタンジェントの違い

タンジェントとアークタンジェント、サインとアークサイン、コサインとアークコサインの違いをすごく簡単に教えてください。

Aベストアンサー

タンジェントやサイン、コサインは、角度に対する関数です。
例えば
 tan60°=√3
のような感じで、角度を入力すると、値が出てきます。

逆に、アークタンジェントなどは、数値に対する関数です。
 arctan√3=60°
などのように、数値を入力すると角度が出てきます。

そして、タンジェントとアークタンジェントの関係は、
springsideさんも書いてありますが、逆関数という関係です。
逆関数というのは、原因と結果が逆になるような関数です。
例えば、
  45°→タンジェント→1
  1  →アークタンジェント→45°
のように、「1」と「45°」が逆の位置にありますよね?
こういう関係を、「逆関数」というんです。

どうでしょう、わかりましたか?

Qkの値と接点の座標の求め方

さきほど数学の問題をやっていたのですが、答えを見ても何故こうなるか分からない問題があります。
どこをどうしたら良いかアドバイスして下さい。

kは定数とする。放物線 y=x^2-4x+3 が直線 y=2x+k に接する時、kの値と接点の座標を求めよ。

自分なりに解いてみた途中式
y=x^2-4x+3-2x-k
=x^2-6x+3-k

(-6)^2-4*1(3-k)=0
36-12+4k=0
4k=-24
k=-6

ここまで解きましたが以後わかりません。
答えはk=-6の時(3,0)

k=-6を出した後、どのような計算をしたら良いのでしょうか?

Aベストアンサー

接点の座標を(X,Y)として、2つの式に代入しましょう。
 Y=X^2-4X+3
 Y=2X-6

これを解けばいいので、下のYを上に代入して、
 2X-6 = X^2-4X+3
 X^2-6X+9 = 0
 (X-3)^2 = 0
 X=3

Xが出たらYもでますね。

QLNK2019: 未解決の外部シンボルのエラーが出る

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自キャラのデータ
Point2D g_jikipos = {40, 400};//自キャラの座標

//画像ハンドル
int g_jikiimage[11];

//色々なファイルの読み込み
int LoadFiles(){
//画像ファイル読み込み
if(LoadDivGraph("media\\player01.bmp",
11,11,1,64,64,g_jikiimage) == -1) return -1;

return 1;
}


 mymain.h
//他から呼び出させるMyMainの関数
void MyMain();
int LoadFiles();


 myhelper.h(サンプルなので打ちミスはない)
#include "DxLib.h"
#include <limits.h>
#include <math.h>

//構造体宣言
//座標またはベクトルを記録する構造体
struct Vector{
float x,y;
};
typedef Vector Point2D;
//線を記録する構造体
struct Line2D{
Point2D startpos, endpos;
float katamuki;//傾きをラジアン値で記録
Vector speed;//移動している場合は速度をセット
};
//球体を記録する構造体
struct Ball2D{
Point2D position;
float hankei;//半径
};
//四角形を記録する構造体
struct Rect2D{
Point2D lefttop;
Point2D rightbottom;
float width;
float height;
};


//ライブラリ関数
Point2D PosInView(Point2D in);
int XInView(float inx);
int YInView(float iny);
void ScrollToLeft(float jikiposx);
void ScrollToRight(float jikiposx);
void ScrollToUp(float jikiposy);
void ScrollToDown(float jikiposy);
void DrawLineInView(float x1, float y1, float x2, float y2, int Color, int Thickness);
void DrawCircleInView(float x, float y, float r, int Color, int FillFlag);
void DrawAnimation(float x, float y, double ExtRate, double Angle,int TurnFlag,
int *imgarray, int allframe, float fps);
//ベクトル関数
Vector CreateVector(Vector in, float veclen);
Vector AddVector(Vector v1, Vector v2);
Vector SubVector(Vector v1, Vector v2);
Vector AddVectorInFrameTime(Vector pos, Vector speed);
Vector AddVectorInFrameTime2(Vector pos, Vector speed, Vector accel);
Vector Normalize(Vector in);
Vector RotateVector(Vector in, float radian);
float VectorLengthSquare(Vector in);
float DotProduct(Vector v1, Vector v2);
float CrossProduct(Vector v1, Vector v2);
void SetLine2DKatamuki(Line2D *in);
void DrawLine2D(Line2D in, int Color, int Thickness);
void DrawBall2D(Ball2D in, int Color, int Fill);
//当たり判定関数
bool HitTestLineAndBall(Line2D linein, Ball2D ballin);
bool IsPointAtLineFace(Line2D linein, Point2D ptin);
bool HitTestLineAndLine(Line2D line1, Line2D line2);
bool HitTestBallAndBall(Ball2D a, Ball2D b);
bool HitTestPointAndBox(Rect2D rect, Point2D pt);
//タイマー関数
void SetSimpleTimer(int idx, int time);
int GetPassedTime(int idx);


//グローバル変数
extern float g_frametime;
extern Rect2D g_framerect;//画面領域(当たり判定)
extern Point2D g_current_field_pos;//現在の左上座標
extern Rect2D g_stagesize;//ステージサイズ

//定数宣言
const float ZEROVALUE = 1e-10f;
const float PIE = 3.1415926f;
const int SCROLL_LIMIT = 200;
----------------------------------------------------------------
 エラー内容
1>myhelper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl MyMain(void)" (?MyMain@@YAXXZ) が関数 _WinMain@16 で参照されました
1>C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\my\Debug\my.exe : fatal error LNK1120: 外部参照 1 が未解決です
1>my - エラー 2、警告 0
ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ
----------------------------------------------------------------
画像を貼り付けときます
(見えにくい場合→http://www.dotup.org/uploda/www.dotup.org154142.jpg.html)
初心者なのでわかりやすくお願いします

Microsoft Visual Studio 2008
Version 9.0.21022.8 RTM
Microsoft .NET Framework
Version 3.5 SP1
----------------------------------------------------------------
新しいプリジェクト→Win32 コンソール アプリケーション(ソリューションのディレクトリを作成 チェック外す)→Windows アプリケーション(空のプロジェクト チェック外す)
----------------------------------------------------------------
 プログラム

 mymain.cpp
#include "myhelper.h"
#include "mymain.h"

//自...続きを読む

Aベストアンサー

ファイル構成から推測するに
mymain.cpp というファイルに
void MyMain(void) {
// ここに処理を書く
}
という関数が必要なようです。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング