goo blog サービス終了のお知らせ 

音律計算ブログ(7と12が織り成す不思議)

誤差のない音律データを目指して。
音律計算やその他について、気になった事をまったりと書いていこうと思います。

3点を通る円(2次元平面内)

2025-04-11 11:06:33 | 行列計算

エクセル等の表計算ソフトの逆行列関数を使って3点を通る円を求める。(2次元平面内)

まず求める円の式を

 x^2+y^2+l*x+m*y+n=0 (一般形 r070719追記)

とすると

 l*x+m*y+n=-(x^2+y^2)

なので3点を

 p1(x1,y1)、p2(x2,y2)、p3(x3,y3) (表のD4:E6)

とすると

 l*x1+m*y1+n=-(x1^2+y1^2)

 l*x2+m*y2+n=-(x2^2+y2^2)

 l*x3+m*y3+n=-(x3^2+y3^2)

となる。行列の式で書けば (libreofficecalcでmathをオブジェクトとして使用)(r070416新画像に変更)

となり、逆行列を使えば一発で答えが出る。(r070416新画像に変更)

逆行列と配列定数を使用してl,m,nを求める。配列定数を使って前半は3行2列の行列の1列目と2列目を入れ替えて3列目を追加して3列目を1とした。後半は2乗して横方向の和。

 D8:D10= =ArrayFormula(mmult(MINVERSE(mmult(D4:E6,{0,1,0;1,0,0})+{0,0,1;0,0,1;0,0,1}),-MMULT(D4:E6^2,{1;1})))

次に中心座標と半径を求める。

 D12= =-D8/2

 D13= =-D9/2

 D14= =((D8^2/4+D9^2/4)-D10)^(1/2)

 

グラフ用データ

 F36= =iferror((-D$9-(D$9^2-4*D36^2-4*D$8*D36-4*D$10)^(1/2))/2,"")

 G36= =iferror((-D$9+(D$9^2-4*D36^2-4*D$8*D36-4*D$10)^(1/2))/2,"")

 以下略

 

散布図でグラフ化

 

元頁(blogger)は2023.04.25 19:22公開

余談2

最初は円の中心のx座標=a、円の中心のy座標=b、円の半径=rとして

 (x-a)^2+(y-b)^2=r^2

で考えて身動きが取れなくなったw

 x^2+y^2+l*x+m*y+n=0

の式を見かけて「これならできる」と思った。l,m,nを求める段階ではx,yは変数じゃなくてただの定数であると思い至った。他の問題でも使えそうだ。

 

余談3 没画像 r070416

本文に「libreofficeのmathで作成」とあったがこれは違う気がする。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« linest関数とseriessum関数の... | トップ | 4点を通る球面(3次元空間内) »
最新の画像もっと見る

コメントを投稿

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。
ブログ作成者から承認されるまでコメントは反映されません。

行列計算」カテゴリの最新記事