マンガでよめる痔のこと・薬のこと

3次元空間において、2つの円の各中心座標(x,y,z)、各法線ベクトルおよび各半径が分かっているときに、これらの円が作る交点(x,y,z)を求める方法を教えてください。できれば、交点がいくつ存在するかを示す判別式もお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

問題の2円の中心は同じですか?


中心も法線も半径も一汎的には異なるものとして問題を考えます.中心A=(a,b,c)、単位法線n=(s,t,u),半径rの円周は次のような集合になります
 {P=(x,y,z)|s(x-a)+t(y-b)+u(z-c)=0,(x-a)^2+(y-b)^2+(z-c)^2=r^2}
このことから2円だと式が4つできて、未知数はx,y,zの3つの連立方程式ができます.
    • good
    • 0
この回答へのお礼

集合かぁ。なるほど。
早急な手ほどき、ありがとうございました。

お礼日時:2005/12/19 19:25

少々まわりくどいけど。


中心と法線ベクトルがわかっていれば、これらの円が存在する平面の方程式が二つ定まりますね。この2つを連立すると2つの平面の交線の方程式が求められます。交点がもし存在するならこの直線上にあります。
そこで、
この交線の方程式と2つの円の中心を中心とし、それぞれの半径を半径とする球の方程式をそれぞれ連立して解けばこの直線と円との共有点が求められます。それで、各円についての直線との共有点がもう一つの円のそれと一致するか、またいくつ一致するかを調べればいいわけです。
もっとも片方の円とこの直線の共有点の座標がわかれば、その点ともう一方の円の中心との距離を求めて、半径と等しいかどうか調べるだけで交点があるかどうかはわかりますが。
他の方法は思いつかないのでどなたか・・・よろしく。
    • good
    • 0
この回答へのお礼

なるほど。
素早いご回答、ありがとうございます!
非常に助かりました。

お礼日時:2005/12/18 20:41

このQ&Aに関連する人気のQ&A

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

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

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

Q空間上の円の方程式について

空間上にある、3点P1(x1,y1,z1),P2(x2,y2,z2)
P3(x3,y3,z3)を通る円の方程式を求めよ。

平面の方程式は、法線ベクトルにより
求められる所までは分かっています。
空間における円の方程式は、球と平面の
交線で表せるというのは、わかったのですが、
この後、どーすれば良いのかが分かりません。

どなたか、よろしくお願いします。

Aベストアンサー

3点を通る円の方程式でしょ?球じゃなくて。
適当な座標変換
(X,Y,Z)' = A (x,y,z)'
('は転置、Aは実数値の3×3行列で、AA' = I (単位行列))を使って、与えられた3点が
(X1,Y1,0), (X2,Y2,0), (X3,Y3,0)
に変換されるようにすれば、(このようなAは何通りもあります。)
Z=0の平面上の3点を通る円を決める問題になります。

 円の方程式
(X-B)^2 + (Y-C)^2 = R^2
は、3次元で見るとZが出てこない訳ですから、(球ではなく)軸がZ軸と平行な円柱を表しています。この方程式(つまりB,C,Rの値)が得られたら、これと、方程式
(X,Y,0)' = A (x,y,z)'
(Z=0の平面を表します。)とを連立させれば、X,Yが直ちに消去でき、x,y,zを含む2本の方程式が得られます。

Q球面と直線の交点

点P(Px,Py,Pz)から方向ベクトル(x,y,z)にのびた直線が、原点O(0,0,0)、半径rの球の表面と交わる点Qの座標を求めたいのですが、どなたか教えていただけないでしょうか。

O-P-Qの三角形を作ると、辺OPの長さ、辺OQの長さ(=r)と∠OPQの角度は求まるので、余弦定理から辺PQの長さが求まります。
辺PQの長さに方向ベクトル(x,y,z)を掛ければ、ベクトルPQが求まるので、ベクトルOP+ベクトルPQ=ベクトルOQが求まると思うのですが、間違っているでしょうか。

Aベストアンサー

なにやら難しいことをお考えのようですが、以下のようにやれば簡単です。

直線は、(X,Y,Z)=(Px,Py,Pz)+t(x,y,z)と表されるので、直線上の点(X,Y,Z)は、
 X=Px+tx
 Y=Py+ty
 Z=Pz+tz
である。(※)

これを球の方程式X^2+Y^2+Z^2=r^2に代入し、tの2次方程式を解いてtの値(2つ。ただし、接するなら1つ)を求め、※に代入すれば、Qの座標がわかる。

Q3次元ベクトルをある軸ベクトルで回転させたい

3次元ベクトルの求め方を教えてください。

下記図のように始点を軸ベクトルでθ(度)だけ回転したときの?の位置を求めたいのです。
これはどのような計算方法になるのでしょうか?なかなか思いつかなくて非常に悩んでいます。
アドバイスや回答をいただけたら助かります。よろしくお願いします。

Aベストアンサー

先ず、中心点(Sx,Sy,Sz)が原点にくるよう全体を平行移動させます。
(一番最後に元に戻します)
始点(Px,Py,Pz)は、(Px-Sx,Py-Sy,Pz-Sz)に移ります。この座標を(Px',Py',Pz')とします。

次に、回転軸ベクトル(Ax Ay Az)を回転させ、x軸に合致させます。それには二回の
回転変換が必要です。
最初に、ベクトル(Ax Ay Az)と、x軸方向単位ベクトル(1 0 0)のなす平面の法線ベクトルが
z軸に合うよう、x軸を回転させます(その角度をφとします)。
すると、回転軸ベクトルはx-y平面上に乗るので、それがx軸に合うよう、z軸を回転させます
(その角度をψとします)。

ベクトル(Ax Ay Az)と、x軸方向単位ベクトル(1 0 0)のなす平面の法線ベクトルは、(0 Az -Ay)。
x軸周りにφ回転させると、このベクトルは、
「1  0    0   「 0  =「      0
0 cosφ -sinφ   Az   Az・cosφ+Ay・sinφ
0 sinφ  cosφ」 -Ay」  Az・sinφ-Ay・cosφ」
で、z軸ベクトルに合うので
「      0      =「0
Az・cosφ+Ay・sinφ  0 
Az・sinφ-Ay・cosφ」  1」
これから、cosφ=-Ay/(Ay^2+Az^2)、sinφ=Az/(Ay^2+Az^2)
∴ φ=Arctan(-Az/Ay)

回転軸ベクトル(Ax Ay Az)は、
「1  0    0   「Ax =「      Ax      =「       Ax                   =「Ax 
0 cosφ -sinφ   Ay   Ay・cosφ-Az・sinφ   Ay・{-Ay/(Ay^2+Az^2)}-Az・{Az/(Ay^2+Az^2)}   -1
0 sinφ  cosφ」  Az」   Ay・sinφ+Az・cosφ」  Ay・{Az/(Ay^2+Az^2)}+Az・{-Ay/(Ay^2+Az^2)}」  0」
に変換され、x-y平面上に乗ります。これを(Ax' Ay' Az') とします。
つまり、(Ax' Ay' Az')=(Ax -1 0)

始点(Px',Py',Pz')もこの変換を受けるのですが、変換を全部纏めて後、一括変換させます。

今度は、x-y平面上に乗った回転軸ベクトル(Ax' Ay' Az')を、z軸の周りにψ回転させます。
「cosψ -sinψ 0 「Ax'  =「Ax'・cosψ-Ay'・sinψ =「Ax・cosψ+sinψ
sinψ  cosψ 0   Ay'   Ax'・sinψ+Ay'・cosψ   Ax・sinψ-cosψ
  0    0   1」  Az'」       Az'      」     0      」
これが、x軸ベクトルに合うので、
Ax・cosψ+sinψ=1
Ax・sinψ-cosψ=0
これから、cosψ=Ax/(Ax^2+1)、sinψ=1/(Ax^2+1)
∴ ψ=Arctan(1/Ax)

以上の回転の変換の積は、
「cosψ -sinψ 0 「1  0    0   =「cosψ -sinψ・cosφ  sinψ・sinφ
sinψ  cosψ 0   0 cosφ -sinφ   sinψ  cosψ・cosφ -cosψ・sinφ
  0    0   1」  0 sinφ  cosφ」   0     sinφ      cosφ   」

この変換を始点(Px',Py',Pz')に施します。
「cosψ -sinψ・cosφ  sinψ・sinφ  「Px' = 「Px'・cosψ-Py'・sinψ・cosφ+Pz'・sinψ・sinφ
sinψ  cosψ・cosφ -cosψ・sinφ  Py'   Px'・sinψ+Py'・cosψ・cosφ-Pz'・cosψ・sinφ
  0     sinφ      cosφ   」 Pz'」  Py'・sinφ+Pz'・cosφ               」 

この点を(Px”,Py”,Pz”)とします。

さて、ここでx軸に合った回転軸ベクトル(1 0 0)周りに(Px”,Py”,Pz”)を角度θ、回転させます。
「1  0    0   「Px” =「     Px”   
0 cosθ -sinθ   Py”  Py”・cosθ-Pz”・sinθ 
0 sinθ  cosθ」  Pz”」  Py”・sinθ+Pz”・cosθ」

これを(P_x, P_y, P_z)とします。

今度は、回転させた回転軸を元に戻す変換です。
回転の変換の逆行列は、行列各要素の余因子の行と列を入れ替えたものを行列式で割ったもので、
行列式は、(cosψ)^2+(sinψ)^2=1 なので、逆行列は
「 cosψ      sinψ        0  
-sinψ・cosφ  cosψ・cosφ   sinφ
sinψ・sinφ   -cosψ・sinφ  cosφ」

これを、(P_x, P_y, P_z)に施します。
「 cosψ      sinψ        0   「P_x =「P_x・cosψ+P_y・sinψ
-sinψ・cosφ  cosψ・cosφ   sinφ  P_y   -P_x・sinψ・cosφ+P_y・cosψ・cosφ+P_z・sinφ
sinψ・sinφ   -cosψ・sinφ  cosφ」 P_z」  P_x・sinψ・sinφ-P_y・cosψ・sinφ+P_z・cosφ」

結局、θ回転後のP点の座標は、
x座標 : P_x・cosψ+P_y・sinψ
y座標 : -P_x・sinψ・cosφ+P_y・cosψ・cosφ+P_z・sinφ
z座標 : P_x・sinψ・sinφ-P_y・cosψ・sinφ+P_z・cosφ
となります。

ここで、置き換えた変数を順次、元に戻します。
P_x、P_y、P_z を Px”、Py”、Pz” に、
Px”、Py”、Pz” を Px’、Py’、Pz’ に、
最後に、平行移動を戻して Px’、Py’、Pz’ を Px、Py、Pz に直します。

先ず、中心点(Sx,Sy,Sz)が原点にくるよう全体を平行移動させます。
(一番最後に元に戻します)
始点(Px,Py,Pz)は、(Px-Sx,Py-Sy,Pz-Sz)に移ります。この座標を(Px',Py',Pz')とします。

次に、回転軸ベクトル(Ax Ay Az)を回転させ、x軸に合致させます。それには二回の
回転変換が必要です。
最初に、ベクトル(Ax Ay Az)と、x軸方向単位ベクトル(1 0 0)のなす平面の法線ベクトルが
z軸に合うよう、x軸を回転させます(その角度をφとします)。
すると、回転軸ベクトルはx-y平面上に乗るので、それがx軸...続きを読む

Q3次元空間内での線分の交差判定について

はじめまして。
3D関係のプログラムを組む上で、線分同士の判定を行う必要があるのですが
数学の知識が乏しく困っています。

3次元空間内の線分ABとCDが交差しているか判定し、
交差していればその交点を求めたいのです。
2次元の場合はできたのですが、3次元になるとどうやって計算すればよいのか
わかりません。(交差以外に、ねじれの位置関係があるんですよね?)
どなたか教えていただけると助かります。

Aベストアンサー

1)一般に「捩れの位置」になりますから、互いに最短の位置を求める問題に帰着します。a-kumaさんの言われるような連立一次方程式では未知数が2つ、式がx,y,z3つとなるので解けません。2次元ならyosizoさんの言われるように未知数と式の数が2つで簡単に解けます。

2)線分AB、CDの何れかの長さが<ε以下、または、線分AB、CDはほぼ平行ならゼロ割を起こすか答えが求まっても答えの精度が著しく低下します。このチェックも実際のプログラムでは絶対に必要です。

3)で、以下、2)のチェック済みであると仮定して.....。

4)たまたま最近3D-CAD用に作ったもので数式の求めた方を忘れてしまったが、

// t0:AB方向単位ベクトル、t1:CD方向単位ベクトル、として、
// float spd = <t0・t1>即ち、ベクトルt0とt1の内積

float det= spd*spd - 1.0f; // spd:AB方向単位ベクトル
v01 = C - A; //3Dベクトル (C-A)
u0 = (spd*<v01・t1> - <v01・t0>) / det;
u1 = (<v01・t0> - spd*<v01・t1>) / det;

として、パラメータ、u0,u1が求まります。ここに、
u0:AB方向パラメータ、u0=0の時、q0(u0)=Aで、u0はAからの距離を表わす。
■q0(u0)=A+u0*t0...............Equ.1)
u1:CD方向パラメータ、u1=0の時、q1(u1)=Cで、u1はCからの距離を表わす。
■q1(u1)=C+u1*t1...............Equ.2)

これで、捩れの位置に2点求まるのですが、

・2点が距離の許容誤差よりも離れていたら、エラーとする。
・2点が距離の許容誤差以内なら、2点の中点を取る。
・中点がいやなら、重みを掛ける(場合もある)。

この説明で不十分ならあとで補足します。

1)一般に「捩れの位置」になりますから、互いに最短の位置を求める問題に帰着します。a-kumaさんの言われるような連立一次方程式では未知数が2つ、式がx,y,z3つとなるので解けません。2次元ならyosizoさんの言われるように未知数と式の数が2つで簡単に解けます。

2)線分AB、CDの何れかの長さが<ε以下、または、線分AB、CDはほぼ平行ならゼロ割を起こすか答えが求まっても答えの精度が著しく低下します。このチェックも実際のプログラムでは絶対に必要です。

3)で、以下、2)のチェック済みである...続きを読む

Q3次元座標2点からの直線式の求め方

お世話になります。

3次元座標2点からの直線式(ax+by+cz=0)の求め方を教えて下さい。

2次元座標であれば、1つの傾きから算出できるのですが、3次元座標になると、X-Y平面、Y-Z平面での傾きの使い方がこんがらかってしまいます。
基本的な質問で申し訳ありませんが、よろしくお願い致します。

座標1 = (x1,y1,z1)
座標2 = (x2,y2,z2)

以上

Aベストアンサー

> 直線式(ax+by+cz=0)の求め方を教えて下さい。
3次元座標では(ax+by+cz=0)は原点を通る平面になり、直線の式ではありません。ax+by+cz=dは平面の一般式です。

2点を通る直線の式には公式があります。
以下のように簡単に導けます。
点(x1,y1,z1)を通り方向ベクトル(x2-x1,y2-y1,z2-z1)の直線ですから
媒介変数形式で
(x,y,z)=(x1,y1,z1)+t(x2-x1,y2-y1,z2-z1)
と成ります。
これを変形してすれば
(x-x1)/(x2-x1)=(y-y1)/(y2-y1)=(z-z1)/(z2-z1)
と3次元座標の直線の式となります。

Q回転した座標軸と一致させるための回転軸と角度の算出

こんにちは。お知恵をお借りしたく質問致します。
プログラミング中で出た話題なのですが、計算の問題ですので数学カテゴリが適しているだろうと思い、投稿いたします。

ちょっと説明しにくく図を添付致しましたので併せてご覧いただければと思います。(線がふるえていて申し訳ないです。)

図のように、xyz座標を回転してXYZ座標の向きに一致させたいと考えています。
また、「指定した軸(α,β,γ)を回転軸としてθ度回転する」という関数があるので、それを活用しようと考えています。α,β,γはコサイン値(方向余弦)です。回転方向は、ベクトルの向きに時計回り…右ネジの法則みたいな感じです。

x軸から見たXの角度(θxX), y軸からのX(θyX), z軸からのX(θzX)
同様にx軸から見たY(θxY),θyY,θzY、θxZ,θyZ,θzZ
といったように、それらの角度(コサイン値)は分かっています。
(=xyz座標からみたXベクトルの方向余弦、Yベクトルの方向余弦、Zベクトルの方向余弦が分かっている。)

z軸とZ軸の外積を取ったベクトルを回転軸として、θzZが分かっているのでその角度で回転することでZ軸は一致しますけど、XY軸は合いません。(当然ですが…)

そのXY軸を合わせるためにまた回転するというのも遠回りで、任意の軸1本を中心に何度か回転するだけ(上記関数を1度使用するだけ)で、必ず向きが一致する解があると思うのですが、その任意軸と角度を算出する方法が分かりません。

一般にどういう計算をするのでしょうか。アドバイスいただければ幸いです。
なお、上記関数を用いない方法でも構いません。
「X軸(Y軸、Z軸)を回転軸としてφ度回転する」という関数もあるので、オイラー角を求める方法でも構いません。

その他、説明不足な点がありましたら随時追記致しますので、ご指摘願います。
どうかよろしくお願いいたします。

こんにちは。お知恵をお借りしたく質問致します。
プログラミング中で出た話題なのですが、計算の問題ですので数学カテゴリが適しているだろうと思い、投稿いたします。

ちょっと説明しにくく図を添付致しましたので併せてご覧いただければと思います。(線がふるえていて申し訳ないです。)

図のように、xyz座標を回転してXYZ座標の向きに一致させたいと考えています。
また、「指定した軸(α,β,γ)を回転軸としてθ度回転する」という関数があるので、それを活用しようと考えています。α,β,γはコサイン値(方向余弦)...続きを読む

Aベストアンサー

というかそのままでいいのか。バカだ。。。。

回転前の基底ex, ey, ez,回転後の基底eX, eY, eZとして

eX = cos(θxX) ex + cos(θyX) ey + cos(θzX) ez
eY = cos(θxY) ex + cos(θyY) ey + cos(θzY) ez
eZ = cos(θxZ) ex + cos(θyZ) ey + cos(θzZ) ez

だから,この係数行列がそのまま座標回転行列。
座標回転行列は実直交行列なので,この転置行列が逆行列。

Q楕円と直線の交点を求めるには

<楕円>
原点座標:(DX,DY)
X軸の半径:a
Y軸の半径:b
 角度:なし
<直線>
始点座標:(SX,SY)
終点座標:(EX,EY)

 この2つの図形が交わるかどうか、また交わる場合にはその交点の座標を知りたいのです。
 「楕円の方程式」「直線の方程式」「解の公式」を使用して手で計算することはできるのですが、
計算式として表すことができません。(中学レベル程度の知識なので・・・)
EXCELで数式を設定したいので、上の変数名を使用した具体的な計算式を教えていただければありがたいです。
よろしくお願いいたします。

Aベストアンサー

手で計算できるなら、Excelで計算することは十分可能と思われますが・・・
ポイントは、解の式を、いきなり与えられた文字で表そうとするのではなく、
・線分の式の係数
・線分の式を楕円の式に代入してできる2次方程式の係数
をそれぞれ算出するようにすれば、無理はないのではないでしょうか?

具体的には、
線分の式をy=mx+nとすれば、m=(EY-SY)/(EX-SX), n=SY-m*SX
楕円に代入すると、(x-DX)^2/a^2+(mx+n-DY)^2/b^2=1
これを整理して、px^2-2qx+r=0とすれば、
p=(1/a^2)+(m^2/b^2)
q=(DX/a^2)+((DY-n)/b^2)
r=(DX^2/a^2)+((DY-n)^2/b^2)-1
解は、x=(q±√(q^2-pr))/p

このm,n,p,q,r,(2つの)xをEXCELで書くのはなんとでもなりませんか?
あとは、SX<=x<=EXに含まれるかを判定すればよいでしょう。
もちろん、q^2-pr<0の場合は、即「交点なし」です。

手で計算するのと、ほんと同じでしょう?

手で計算できるなら、Excelで計算することは十分可能と思われますが・・・
ポイントは、解の式を、いきなり与えられた文字で表そうとするのではなく、
・線分の式の係数
・線分の式を楕円の式に代入してできる2次方程式の係数
をそれぞれ算出するようにすれば、無理はないのではないでしょうか?

具体的には、
線分の式をy=mx+nとすれば、m=(EY-SY)/(EX-SX), n=SY-m*SX
楕円に代入すると、(x-DX)^2/a^2+(mx+n-DY)^2/b^2=1
これを整理して、px^2-2qx+r=0とすれば、
p=(1/a^2)+(m^2/b^2)
q=(DX/a^2)+((...続きを読む

Qファイルやディレクトリの存在確認を行う方法

ファイルをオープンするのはfopenでOKですが、ファイルやディレクトリの存在確認を行う方法が知りたいです。

何か組み合わせて作るものなのでしょうか?
perlとか便利な演算子があるのですが、C/C++って器用ではないですね。
これは処理系?依存の内容ですか?

私の環境は VC6, VC2005 Windows2000です。

Aベストアンサー

int access(const char* path, int mode);
int stat(const char* path, struct stat* sb);

かな?
MSDN を引くと _access_s() を使えとか書いてあるけど。

Q円の中心座標の問題の解き方を教えてください。

円の中心座標の問題の解き方を教えてください。

問題
3点A(1,-2,1) B(3,1,7) C(2,0,6)を通る円の中心座標を求めよ

解く方針は以下のようにしました。
中心座標をO(X,Y,Z)とおき、AB、BCとCAの中点をそれぞれ点D,E,Fとして
OD,OE,OFはそれぞれAB、BC、CAと直交することから内積を利用して中心Oを求めようとしましたが、
解けませんでした。

よろしくお願いします。

Aベストアンサー

3点が1平面上にあって、これらを通る円というのは気がつきませんでした。
3点A(1,-2,1) B(3,1,7) C(2,0,6)を通る円はこの平面では円でもxy平面に投影すると楕円になるところがにくいところです。

(解答)
円の中心座標をP(x,y,z)、半径をrとすると
(x-1)^2+(y+2)^2+(z-1)^2=r^2 (1)
(x-3)^2+(y-1)^2+(z-7)^2=r^2  (2)
(x-2)^2+y^2+(z-6)^2=r^2    (3)

(2)-(3)より
x+y+z=19/2 (4)
(1)-(3)より
x+2y+5z=17  (5)

点P(x,y,z)、A(1,-2,1)、 B(3,1,7)、 C(2,0,6)
が1平面状にあることから

行列式
|x, y,z,1|
|1,-2,1,1| = 0
|3, 1,7,1|
|2, 0,6,1|

4行目を各行から引いて
|x-2, y,z-6,0|
| -1,-2, -5,0| = 0
| 1, 1, 1,0|
| 2, 0, 6,1|

|x-2, y,z-6|
| -1,-2, -5| = 0
| 1, 1, 1|

展開して

3x-4y+z=12 (6)

(4)、(5)、(6)を連立して
x=80/13
y=51/26
z=18/13

3点が1平面上にあって、これらを通る円というのは気がつきませんでした。
3点A(1,-2,1) B(3,1,7) C(2,0,6)を通る円はこの平面では円でもxy平面に投影すると楕円になるところがにくいところです。

(解答)
円の中心座標をP(x,y,z)、半径をrとすると
(x-1)^2+(y+2)^2+(z-1)^2=r^2 (1)
(x-3)^2+(y-1)^2+(z-7)^2=r^2  (2)
(x-2)^2+y^2+(z-6)^2=r^2    (3)

(2)-(3)より
x+y+z=19/2 (4)
(1)-(3)より
x+2y+5z=17  (5)

点P(x,y,z)、A(1,-2,1)、 B(3,1,7)、 C(2,0,6)
が1平面状にあることから

行列式
|...続きを読む


人気Q&Aランキング