「夫を成功」へ導く妻の秘訣 座談会

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

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

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

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

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

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

A 回答 (1件)

地道に解いた結果をもちいれば良いと思います。


中心を(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)}


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

ありがとうございます!
手で計算してみたら、符号が一部逆でして

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)}

でうまくいきました!どうもありがとうございます!

お礼日時:2011/11/07 08:43

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

Java 計算」に関するQ&A: VBとVBAの違い

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

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

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

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多点を通る円の中心

3点を通る円の中心を求める解法はわかりますが、4点以上の多点を通る場合は、どのような求め方があるでしょうか?
どなたかわかる方アドバイス願います。

Aベストアンサー

#3の続きです。
e=(x-a)^2+(y-b)^2-r^2
を展開して、
e = -2ax -2by + a^2+b^2-r^2 + x^2+y^2
となるので、
A = -2a
B = -2b
C = a^2+b^2-r^2
とおくと
e = xA + yB + C + x^2+y^2
となります。ここで、上式に4点の座標を代入して、両辺を足し合わせた結果を簡便に表す(ちょっとインチキですが我慢して下さい)ために次のようにおきます。
X = xに関する和
Y = yに関する和
(たとえば、XY=x1*y1 + … + x4*y4という意味)
E = e1 + e2 + e3 + e4
したがって、
E = XA + YB + C + X^2+Y^2
両辺を自乗して、
E^2 = ( XA + YB + C + X^2+Y^2 )^2
この式をA,B,Cそれぞれについて偏微分して0とおくと
X^2*A + XY*B + X*C + X(X^2+Y^2) = 0
XY*A + Y^2*B + Y*C + Y(X^2+Y^2) = 0
X*A + Y*B + C + (X^2+Y^2) = 0
という式が得られます。これをA,B,Cを変数とする連立方程式として解いて、変数変換したときの式で元にもどせば円の式が得られます。このとき上記の式において、XYに関する記述は次の意味なのでご注意下さい。
X^2 = x1 + … + x4
XY = x1*y1 + … + x4*y4
X = x1 + … + x4
X(X^2+Y^2) = x1*(x1^2+y1^2) + … + x4*(x4^2+y4-2)
Y^2 = y1^2 + … + y4^2
Y = y1 + … + y4
Y(X^2+Y^2) = y1*(x1^2+y1^2) + … + y4*(x4^2+y4-2)
(X^2+Y^2) = x1^2+y1^2 + … + x4^2+y4-2

連立方程式を解く部分はmaririn222さんに委ねます。
言うまでもないことですが、4点に対しての式を書きましたが、4点以上の何点でも適用できることは明らかですよね。

#3の続きです。
e=(x-a)^2+(y-b)^2-r^2
を展開して、
e = -2ax -2by + a^2+b^2-r^2 + x^2+y^2
となるので、
A = -2a
B = -2b
C = a^2+b^2-r^2
とおくと
e = xA + yB + C + x^2+y^2
となります。ここで、上式に4点の座標を代入して、両辺を足し合わせた結果を簡便に表す(ちょっとインチキですが我慢して下さい)ために次のようにおきます。
X = xに関する和
Y = yに関する和
(たとえば、XY=x1*y1 + … + x4*y4という意味)
E = e1 + e2 + e3 + e4
したがって、
E = XA + YB + C + X^2+Y^2
両辺を...続きを読む

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三角形の外接円の中心と半径を出力するcプログラム

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0010&lang=jp

この問題で、sample inputのデータを入力すると問題なく出力されるのですが、コードを提出するとなぜかWrong Answer となってしまいます。
どこがおかしいのか教えてください。。

#include<stdio.h>
#include<math.h>
int main(){
double x1,x2,x3,y1,y2,y3,p,q,r;
int i,n;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3);
p = ((y1-y3)*(y1*y1-y2*y2+x1*x1-x2*x2)-(y1-y2)*(y1*y1-y3*y3+x1*x1-x3*x3))/(2*(y1-y3)*(x1-x2)-2*(y1-y2)*(x1-x3));
q = ((x1-x3)*(x1*x1-x2*x2+y1*x1-y2*x2)-(x1-x2)*(x1*x1-x3*x3+y1*y1-y3*y3))/(2*(x1-x3)*(y1-y2)-2*(x1-x2)*(y1-y3));
r = sqrt((x1-p)*(x1-p)+(y1-q)*(y1-q));
printf("%.3f %.3f %.3f\n",p,q,r);
}
return 0;
}

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0010&lang=jp

この問題で、sample inputのデータを入力すると問題なく出力されるのですが、コードを提出するとなぜかWrong Answer となってしまいます。
どこがおかしいのか教えてください。。

#include<stdio.h>
#include<math.h>
int main(){
double x1,x2,x3,y1,y2,y3,p,q,r;
int i,n;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3);
p = ((y1-y3)*(y1*y1-y2*y2+x1*x1-x2*x2)-(y1-y2)*(y1*y1-y3*y...続きを読む

Aベストアンサー

単純に「計算式が間違っている」です。


テストパターンとして
6
0.0 0.0 0.0 2.0 2.0 2.0
0.0 0.0 2.0 2.0 0.0 2.0
0.0 2.0 0.0 0.0 2.0 2.0
0.0 2.0 2.0 2.0 0.0 0.0
2.0 2.0 0.0 0.0 0.0 2.0
2.0 2.0 0.0 2.0 0.0 0.0
を使います。

(0.0 0.0) ( 0.0 2.0) (2.0 2.0)
これは、サンプルにあった座標と同じ外接円に接する三角形になります。
その座標を入れ替えた全6通りです。全て同じ三角形です。
ということは、サンプルと同じに
1.000 1.000 1.414
になるはずです
ですが、実際には違う値になります。


どこに間違いがあるか、探すのは面倒なのでやっていません。

直したら、いろんなパターンを入力して確認してみましょう。
中心(x0,y0) 長さr0 の円上の点(xa,ya) は
xa=x0+r0 * cos(Ta)
ya=y0+r0 * cos(Ta)
で求められます。
x0,y0,r0,Ta,Tb,Tc を乱数で決めれば、A,B,Cの3点の座標が求まります。
その順列全てを並べれば、テストパターンの完成です。
・全部の順列で答えが(ほぼ)同じ
・その答えが元のx0,y0,r0と(ほぼ)同じ
ということで確認することができます。

単純に「計算式が間違っている」です。


テストパターンとして
6
0.0 0.0 0.0 2.0 2.0 2.0
0.0 0.0 2.0 2.0 0.0 2.0
0.0 2.0 0.0 0.0 2.0 2.0
0.0 2.0 2.0 2.0 0.0 0.0
2.0 2.0 0.0 0.0 0.0 2.0
2.0 2.0 0.0 2.0 0.0 0.0
を使います。

(0.0 0.0) ( 0.0 2.0) (2.0 2.0)
これは、サンプルにあった座標と同じ外接円に接する三角形になります。
その座標を入れ替えた全6通りです。全て同じ三角形です。
ということは、サンプルと同じに
1.000 1.000 1.414
になるはずです
ですが、実際には違う値になります。


どこ...続きを読む

Q二点間を通り半径Rの中心点を求めるには。

教えて下さい。
二点間を通る、半径Rの中心点を求めるには、
どういった方法があるのでしょうか?
公式などあるのでしょうか?
例えば、
(14.502,46.811)と(10.346,38.576)を通る、
半径4.612の円の中心点はどうやったら求まるのでしょうか?
よろしくお願いします。

Aベストアンサー

>二点間を通る、半径Rの中心点を求めるには、
二点を通る円で半径Rの円の中心点を求めるには、
が正しい書き方です。
2点を(x1,y1),(x2,y2)とし円の中心点を(x,y)と置くと次の式が成立する。
(x-x1)^2+(y-y1)^2=R^2 … (1)
(x-x2)^2+(y-y2)^2=R^2 … (2)

(1)-(2)から
(2x-x1-x2)(x2-x1)+(2y-y1-y2)(y2-y1)=0 … (3)

(1)と(3)を(x,y)の連立方程式として解けば、通常、2組の解が出てきます。
2点間の距離>2Rの時は解が無い
2点間の距離=2Rの時は解は重解で2点を結ぶ線分が円の直径となる。
 円の中心は2点を結ぶ線分の中点が円の中心になります。
2点間の距離<2Rの時は
 2組の解の座標点が円の中心になり、円の中心は2つ存在します。
 この場合の円の中心は、(1)と(3)を(x,y)の連立方程式の解ですが、
 公式とするには式が長く複雑すぎます。
 個別の点が与えられたら、その都度、(1)と(3)から連立方程式を解いて
 円の中心座標の解を求めた方がよいでしょうね。

>(14.502,46.811)と(10.346,38.576)を通る、
>半径4.612の円の中心点はどうやったら求まるのでしょうか?

2点間の距離
 =√(((14.50200 - 10.34600)^2) + ((46.81100 - 38.57600)^2))
 = 9.2242919

一方、円の直径=4.61200*2=9.22400
2点間の距離の方が円の直径より大なので不可能です。

もし、
>>(14.502,46.811)と(10.346,38.576)
2点を直径とする円なら、円の中心(x,y)を求める式は
x=(14.502+10.346)/2=12.424
y=(46.811+38.576)/2=42.6935
で計算できます。

>二点間を通る、半径Rの中心点を求めるには、
二点を通る円で半径Rの円の中心点を求めるには、
が正しい書き方です。
2点を(x1,y1),(x2,y2)とし円の中心点を(x,y)と置くと次の式が成立する。
(x-x1)^2+(y-y1)^2=R^2 … (1)
(x-x2)^2+(y-y2)^2=R^2 … (2)

(1)-(2)から
(2x-x1-x2)(x2-x1)+(2y-y1-y2)(y2-y1)=0 … (3)

(1)と(3)を(x,y)の連立方程式として解けば、通常、2組の解が出てきます。
2点間の距離>2Rの時は解が無い
2点間の距離=2Rの時は解は重解で2点を結ぶ線分が円の直径となる。
 円...続きを読む

Q円弧3点の座標から円の中心座標と半径の求め方をお願いいたします。

円弧3点の座標から円の中心座標と半径の求め方をお願いいたします

Aベストアンサー

円の方程式の一般系は、
x^2 + y^2 + lx + my + n = 0である。
三点を(x1,y1),(x2,y2),(x3,y3)とすると、
これらを代入すれば、

(x1)^2 + (y1)^2 + l(x1) + m(y1) + n = 0---(1)
(x2)^2 + (y2)^2 + l(x2) + m(y2) + n = 0---(2)
(x3)^2 + (y3)^2 + l(x3) + m(y3) + n = 0---(3)

(1)(2)(3)のl,m,nに関する3元連立方程式となるので、
これをとき、それぞれの解を求める。
そして,求まった解をそれぞれ、l',m',n'とおく。
後は、x^2 + y^2 + l'x + m'y + n' = 0とし、
以下のように変形していく。

(x + l'/2)^2 + (y + m'/2)^2 + n' - (l'/2)^2 - (m'/2)^2 = 0
(x + l'/2)^2 + (y + m'/2)^2 = {(m'/2)^2 + (l'/2)^2 - n'}

これにより、円の中心の座標は、(-l'/2,-m'/2)であり、
円の半径は、√{(m'/2)^2 + (l'/2)^2 - n'}となります。

円の方程式の一般系は、
x^2 + y^2 + lx + my + n = 0である。
三点を(x1,y1),(x2,y2),(x3,y3)とすると、
これらを代入すれば、

(x1)^2 + (y1)^2 + l(x1) + m(y1) + n = 0---(1)
(x2)^2 + (y2)^2 + l(x2) + m(y2) + n = 0---(2)
(x3)^2 + (y3)^2 + l(x3) + m(y3) + n = 0---(3)

(1)(2)(3)のl,m,nに関する3元連立方程式となるので、
これをとき、それぞれの解を求める。
そして,求まった解をそれぞれ、l',m',n'とおく。
後は、x^2 + y^2 + l'x + m'y + n' = 0とし、
以下のように変形していく。

...続きを読む

QExcelを使用して円弧の半径を最小二乗法で求めたい

半径rで加工した円弧状の加工物があります。
その加工物の円周上の数点の位置測定データ(仮想原点からのX,Y座標)から
最小二乗法でその半径を計算したいのですが、Excelで計算できるでしょうか?

Aベストアンサー

できます.ソルバーを使います.

メニューの「ツール」の中に「ソルバー」がなければ,
まず,メニュー→「アドイン」で,ソルバーにチェックをつけて,OKをクリックし,指示に従って操作すると,ソルバーがインストールされます.その際,office等のCD-ROMが必要です.

さて,メニュー→「ツール」→「ソルバー」を選択すると,ダイアログが開きます.
・目的セル
・目標値(最大値,最小値,値)
・変化させるセル
などの項目があります.今はこのダイアログは閉じて,これにあったセルをまず用意しましょう.

例えば,
   A   B   C  D
1 dx  dy  r
2 0   0   1  ***
3 xi  yi
4 4   2   *  **
5 3   5
6 2   6
7 1   7

のようにします.(等幅フォントでご覧下さい.)
A2からC2はソルバーによって値が変化するので,適当な値を入力しておけばいいです.
データをA4,B4から順に下に向かって入力してください.
C4には,
=sqrt((C4-$A$2)^2+(B4-$B$2)^2)
D4には,
=(C4-$C$2)^2
とし,
C4をC7までコピー,
D4をD7までコピーしてください.
さらに,D2に
=SUM(D4:D7)
とします.もちろん,データ数が多い場合は,D7の7はもっと大きい値になります.

ここまで準備ができたら,あらためてソルバーを起動し,
・目的セルを「D2」
・目標値(最大値,最小値,値)を「最小値」
・変化させるセルを「A2:C2」
として,実行してください.

以上.

できます.ソルバーを使います.

メニューの「ツール」の中に「ソルバー」がなければ,
まず,メニュー→「アドイン」で,ソルバーにチェックをつけて,OKをクリックし,指示に従って操作すると,ソルバーがインストールされます.その際,office等のCD-ROMが必要です.

さて,メニュー→「ツール」→「ソルバー」を選択すると,ダイアログが開きます.
・目的セル
・目標値(最大値,最小値,値)
・変化させるセル
などの項目があります.今はこのダイアログは閉じて,これにあったセルをまず用意しまし...続きを読む

Q円の最小二乗法の公式

いくつかのデータから最小二乗法で近似曲線を求めたいのですが、よくわかりません。そのデータ集の近似曲線は円になります。
最小二乗法を調べ、1次、2次関数についてはわかりました。ある点の座標を(x1,y1), (x2,y2)…、近似曲線上の座標を(x1,y’1),(x2,y’2)… とした時、
(y’1-y1)^2 + (y’2-y2)^2 … が最小となるような係数a,b などを偏微分 → 連立方程式で求めるという方法でした。
円についても、同様の方法で r^2 = (x-a)^2 + (y-b)^2 のような近似曲線の式が求められるのでしょうか?1次関数などのように、y’1-y1を求めようとすると、±√ が出てきてしまい、ややこしくなる気がしますが、これを解くしかないのでしょうか?もしくは別の解法があるのでしょうか?詳しく教えていただけたらと思います。よろしくお願いします。

Aベストアンサー

円の場合は中心対称なので、普通の最小二乗法のような y の値の差の2乗でなく、半径の2乗の差の総和をゼロとする方法が良いと思います数学的には適切ではないかもしれませんが、実験データをモデルに当てはめるような目的なら問題ないと思います。乱数で値をばらつかせた100組のデータで実際計算してみましたが、うまくフィッティングできました。

当てはめる円の方程式を
   ( x - x0 )^2 + ( y - y0 )^2 = r^2
としたとき、n個のデータ組( xi, yi )に対する半径の2乗の差の総和
   S = Σ{ r^2 - ( xi - x0 )^2 - ( yi - y0 )^2 } --- (1)
がゼロとなる x0, y0, r の値は
   x0 = ( Σxi )/n
   y0 = ( Σyi )/n
   r = = √{ ( Σxi^2 + Σyi^2 )/n - ( x0^2 + y0^2 ) }
になります( x0, y0 はそれぞれ xi, yi の単なる加算平均になります)。

(x0, y0, r の計算方法)
x0 と y0 を変化させたとき S が最小となるのは
   ∂S/∂x0 = -2*Σ ( xi - x0 ) = -2*( Σxi - Σx0 ) = -2*( Σxi - n*x0 ) = 0
   ∂S/∂y0 = -2*Σ ( yi - y0 ) = -2*( Σyi - Σy0 ) = -2*( Σyi - n*y0 ) = 0
となるときなので
   x0 = ( Σxi )/n、y0 = ( Σyi )/n --- (2)
一方、式(1)を展開すれば
   S = Σ{ r^2 - ( xi - x0 )^2 - ( yi - y0 )^2 }
     = n*r^2 -Σxi^2 -Σyi^2 + 2*x0*Σxi + 2*y0*Σyi - n*( x0^2 + y0^2 )
なので、これがゼロとなるためには
    r = √[ { Σxi^2 +Σyi^2 - 2*x0*Σxi - 2*y0*Σyi + n*( x0^2 + y0^2 ) }/n ]
でなければなりません。
式(2)から
    Σxi = n*x0、Σyi = n*y0
なので
    r = √[ { Σxi^2 +Σyi^2 - n*( x0^2 + y0^2 ) }/n ]
     = √{ ( Σxi^2 + Σyi^2 )/n - ( x0^2 + y0^2 ) }

円の場合は中心対称なので、普通の最小二乗法のような y の値の差の2乗でなく、半径の2乗の差の総和をゼロとする方法が良いと思います数学的には適切ではないかもしれませんが、実験データをモデルに当てはめるような目的なら問題ないと思います。乱数で値をばらつかせた100組のデータで実際計算してみましたが、うまくフィッティングできました。

当てはめる円の方程式を
   ( x - x0 )^2 + ( y - y0 )^2 = r^2
としたとき、n個のデータ組( xi, yi )に対する半径の2乗の差の総和
   S = Σ{ r^2 - ...続きを読む

Q曲率の求め方

2次元で、3点(X1,Y1), (X2,Y2), (X3,Y3) が既知のとき、
これらの点を通る円の曲率の求め方を教えて頂けないでしょうか?また、3次元で4点がわかっている時の求め方も教えて頂けないでしょうか?

Aベストアンサー

2次元の場合の曲率ρは,3点A(X1,Y1),B(X2,Y2),C(X3,Y3)で作られる三角形の外接円の半径Rの逆数を求めればいいので,正弦定理より,
ρ=1/R=2sinA/|BC|
を利用して求めるといいでしょう.ここでsinAの値を求めるにはいくつかやり方があるかと思いますが,ここでは簡単に2次元ベクトルの外積を利用して,
|AB↑×AC↑|=|AB||AC|sinA
から求めてみます.左辺は
AB↑×AC↑=(OB↑-OA↑)×(OC↑-OA↑)=OA↑×OB↑+OB↑×OC↑+OC↑×OA↑
と変形できますので,曲率ρは,
ρ=2|AB↑×AC↑|/|AB||AC||BC|=2|OA↑×OB↑+OB↑×OC↑+OC↑×OA↑|/|AB||BC||CA|
と表すことができます.ここで具体的に座標の値を入れてあげると,
OA↑×OB↑=X1Y2-X2Y1
|AB|=√((X1-X2)^2+(Y1-Y2)^2)
より,最終的に
ρ=2|X1Y2-X2Y1+X2Y3-X3Y2+X3Y1-X1Y3|/√[((X1-X2)^2+(Y1-Y2)^2)((X2-X3)^2+(Y2-Y3)^2)((X3-X1)^2+(Y3-Y1)^2)]
となります.

3次元になると,一般化の計算は何か上手い方法を見つけないと大変でしょうね.^^

2次元の場合の曲率ρは,3点A(X1,Y1),B(X2,Y2),C(X3,Y3)で作られる三角形の外接円の半径Rの逆数を求めればいいので,正弦定理より,
ρ=1/R=2sinA/|BC|
を利用して求めるといいでしょう.ここでsinAの値を求めるにはいくつかやり方があるかと思いますが,ここでは簡単に2次元ベクトルの外積を利用して,
|AB↑×AC↑|=|AB||AC|sinA
から求めてみます.左辺は
AB↑×AC↑=(OB↑-OA↑)×(OC↑-OA↑)=OA↑×OB↑+OB↑×OC↑+OC↑×OA↑
と変形できますので,曲率ρは,
ρ=2|AB↑×AC↑|/|AB||AC||BC|=2|OA↑×OB↑+OB↑×OC↑+OC↑×OA...続きを読む

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軸...続きを読む


人気Q&Aランキング