本文へ移動
サポートシェアリングソリューション
OKWAVE Plus
「OKWAVE Plus の利用」に関するアンケートご協力のお願い
アンケートに答えると抽選で500名様にAmazonギフト券100円分をプレゼント!
アンケートはこちら

このQ&Aは役に立ちましたか?

締切済み
※ ChatGPTを利用し、要約された質問です(原文:任意の3点を通る球体の中心の求め方)

任意の3点を通る球体の中心の求め方

2023/10/18 09:33

このQ&Aのポイント
  • 任意の3点、点A(x1,y1,z1)、点B(x2,y2,z2)、点C(x3,y3,z3)を通る球体半径rの中心点D(a,b,c)を求める計算方式を教えてください。
  • マイナスとプラスで出てくると思いますが最終的にプラスの値を採用とします。
  • エクセルで常に計算出来るように書式を作りたいです。ソルバーを使ってもなぜかうまくいきません。私の計算式が間違っているのかもしれませんが。
※ 以下は、質問の原文です

任意の3点を通る球体の中心の求め方

2010/02/13 17:43

任意の3点、点A(x1,y1,z1)、点B(x2,y2,z2)、点C(x3,y3,z3)を通る球体半径rの中心点D(a,b,c)を求める計算方式を教えてください。

マイナスとプラスで出てくると思いますが最終的にプラスの値を採用とします。

エクセルで常に計算出来るように書式を作りたいです。

ソルバーを使ってもなぜかうまくいきません。

私の計算式が間違っているのかもしれませんが。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1230122222

回答 (7件中 1~5件目)

2010/02/17 06:44
回答No.7

回答(6)です。

下のほうで求めた中心座標の検証に使った、CAD(Rhinoceros)での求めかたの例も書いておきます。

1)3点を描く。
http://mcnc.hp.infoseek.co.jp/cgi-bin/img-box/img20100217062901.jpg

2)3点と中心とする球を描く。
http://mcnc.hp.infoseek.co.jp/cgi-bin/img-box/img20100217062916.jpg

3)球の交線の交点が答え。
http://mcnc.hp.infoseek.co.jp/cgi-bin/img-box/img20100217062932.jpg

簡単に求められて、確認も目視で分かりやすいですが、CADが高価だった一昔前でしたらとても贅沢な手段ですね。

Excelのソルバーは使ったことがなかったので、私も勉強になりました。
ついでに、任意の4点を通る球の中心と半径も、同じ方法で求められることを確認しました。
きっかけをいただき、ありがとうございました。

お礼

2010/03/10 13:17

返答遅くなりました。回答何度もありがとうございます。
ソルバーまで検証して頂きありがとうございます。
私は2D-CADしかなく3D検証が出来なく困っていました。

質問者

このQ&Aは役に立ちましたか?

この質問は投稿から一年以上経過しています。
解決しない場合、新しい質問の投稿をおすすめします。

質問する
2010/02/16 22:34
回答No.6

回答(5)です。

>ソルバーを使ってもなぜかうまくいきません。

ソルバーも試してみました。

質問で紹介された参考URLの内容そのままではダメで、
制約条件を設定したらうまくいきました。

仮に、中心に3点の最小値を入れて計算させると、
http://mcnc.hp.infoseek.co.jp/cgi-bin/img-box/img20100216221739.jpg

中心座標1が求まります。
http://mcnc.hp.infoseek.co.jp/cgi-bin/img-box/img20100216221804.jpg

同様に、中心に3点の最大値を入れて計算させると、中心座標2が求まります。
さすがExcel、すばらしいですね。

2010/02/16 07:47
回答No.5

回答(3)です。回答(1)さんへ、

>青軸上ならどこでもかける
>
>任意の3点を通る最小の球体の中心 って縛りをつけないと

球の半径rを指定するので2つ以内に決まりますよ。
こんな感じ。
http://mcnc.hp.infoseek.co.jp/cgi-bin/img-box/img20100216073946.jpg

2010/02/15 18:52
回答No.4

もう、殆ど答えは出ていますが、中心点D(a,b,c)で半径rの円を考えて、
点Aを通る場合と点Bを通る場合と、点Cを通る場合とで式をたてると、
求まります。

お礼

2010/03/10 13:15

返答遅くなりました。回答ありがとうございます。
計算するとなると大変ですね。

質問者
2010/02/13 20:07
回答No.3

下記URLで、回答(2)さんの内容からもうちょっと先のところまでお話がされています。

(BIGLOBEなんでも相談室)
http://soudan1.biglobe.ne.jp/qa195295.html

Perlで確認してみました。
-----
# 3点
my($x1,$y1,$z1)=(-51,-21,-11);
my($x2,$y2,$z2)=( 62, 12, 22);
my($x3,$y3,$z3)=(-73, 83, 33);
# 半径
my $r1=100;

my $tm01=$x1**2-$x2**2+$y1**2-$y2**2+$z1**2-$z2**2;
my $tm02=$x1**2-$x3**2+$y1**2-$y3**2+$z1**2-$z3**2;
my $tm11=-2*($x1-$x2)*($z1-$z3)+2*($x1-$x3)*($z1-$z2);
my $tm12=-2*($y1-$y2)*($z1-$z3)+2*($y1-$y3)*($z1-$z2);
my $tm13=$tm01*($z1-$z3)-$tm02*($z1-$z2);
my $tm21=-2*($x1-$x2)*($y1-$y3)+2*($x1-$x3)*($y1-$y2);
my $tm22=-2*($z1-$z2)*($y1-$y3)+2*($z1-$z3)*($y1-$y2);
my $tm23=$tm01*($y1-$y3)-$tm02*($y1-$y2);
my $tma=1+$tm11**2/$tm12**2+$tm21**2/$tm22**2;
my $tmb=-2*$x1+2*($y1+$tm13/$tm12)*$tm11/$tm12+2*($z1+$tm23/$tm22)*$tm21/$tm22;
my $tmc=$x1**2+($y1+$tm13/$tm12)**2+($z1+$tm23/$tm22)**2-$r1**2;
my $xq1=(-$tmb+sqrt($tmb**2-4*$tma*$tmc))/2/$tma;
my $xq2=(-$tmb-sqrt($tmb**2-4*$tma*$tmc))/2/$tma;
my $yq1=-$tm13/$tm12-$tm11/$tm12*$xq1;
my $yq2=-$tm13/$tm12-$tm11/$tm12*$xq2;
my $zq1=-$tm23/$tm22-$tm21/$tm22*$xq1;
my $zq2=-$tm23/$tm22-$tm21/$tm22*$xq2;

printf("xq1=%9.3f yq1=%9.3f yq1=%9.3f\n",$xq1,$yq1,$zq1);
printf("xq2=%9.3f yq2=%9.3f yq2=%9.3f\n",$xq2,$yq2,$zq2);
-----

出た答え。
-----
xq1= -2.410 yq1= 63.052 yq1= -34.965
xq2= -20.432 yq2= 11.190 yq2= 78.607
-----

CADで作図したものと一致したので大丈夫と思います。

お疲れさまでした。

すみません、間違いがありました。
後ろのほうです。

+++++ 誤 +++++
printf("xq1=%9.3f yq1=%9.3f yq1=%9.3f\n",$xq1,$yq1,$zq1);
printf("xq2=%9.3f yq2=%9.3f yq2=%9.3f\n",$xq2,$yq2,$zq2);
-----

出た答え。
-----
xq1= -2.410 yq1= 63.052 yq1= -34.965
xq2= -20.432 yq2= 11.190 yq2= 78.607
-----
++++++++++++++

+++++ 正 +++++
printf("xq1=%9.3f yq1=%9.3f zq1=%9.3f\n",$xq1,$yq1,$zq1);
printf("xq2=%9.3f yq2=%9.3f zq2=%9.3f\n",$xq2,$yq2,$zq2);
-----

出た答え。
-----
xq1= -2.410 yq1= 63.052 zq1= -34.965
xq2= -20.432 yq2= 11.190 zq2= 78.607
-----
++++++++++++++

お礼をおくりました

さらに、この回答をベストアンサーに選びますか?

ベストアンサーを選ぶと質問が締切られます。
なおベストアンサーを選びなおすことはできません。