2023年4月25日火曜日

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

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

まず求める円の式を

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

とすると

 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をオブジェクトとして使用)






となり、逆行列を使えば一発で答えが出る。





逆行列と配列定数を使用して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)

BCDE
2
3yx
4p10.0000.000
5p24.0004.000
6p30.0004.000
7
8l-4.000
9m-4.000
10n0.000
11
12中心x2.000
13中心y2.000
14半径2.828


 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,"")

BCDEFG

26グラフ用
27-0.828←x=中心-rxy(p1-p3)y(円の下側)y(円の上側)
284.828←x=中心+r0.0000.000
290.566←xの範囲の1割4.0004.000
3010←分割4.0000.000
31-1.0547
32-0.9981
33-0.9416
34-0.8850
35-0.8284
36-0.77191.43722.5628
37-0.71531.20802.7920
38-0.65871.03502.9650
39-0.60220.89153.1085
40-0.54560.76713.2329
41-0.48900.65663.3434
42-0.43240.55673.4433
43-0.37590.46533.5347
44-0.31930.38113.6189
45-0.26270.30293.6971
46-0.20620.23003.7700
47-0.14960.16173.8383
48-0.09300.09763.9024
49-0.03650.03713.9629
500.0201-0.01994.0199
510.0767-0.07384.0738
520.1332-0.12494.1249
530.1898-0.17334.1733
540.2464-0.21924.2192
550.3029-0.26274.2627
560.3595-0.30414.3041
570.4161-0.34334.3433
580.4726-0.38064.3806
590.5292-0.41594.4159
600.5858-0.44954.4495

グラフ用データ行は以下略



2023.04.25 19:22公開 単純ミスなどは適宜修正済&修正予定

余談1

フォントによってズレそうだ。後でhtmlで表を作るかドライブの表に差し替える予定。

実際に3点を通る散布図も追加したい。


余談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

いつか3点を通る円(3次元空間内)をやってみたい。


以下テスト用

mathtypeを使った行列の式の残骸

{"mathml":"<math style=\"font-family:stix;font-size:16px;\" xmlns=\"http://www.w3.org/1998/Math/MathML\"><mstyle mathsize=\"16px\"><mfenced><mtable><mtr><mtd><msub><mi>x</mi><mn>1</mn></msub></mtd><mtd><msub><mi>y</mi><mn>1</mn></msub></mtd><mtd><mn>1</mn></mtd></mtr><mtr><mtd><msub><mi>x</mi><mn>2</mn></msub></mtd><mtd><msub><mi>y</mi><mn>2</mn></msub></mtd><mtd><mn>1</mn></mtd></mtr><mtr><mtd><msub><mi>x</mi><mn>3</mn></msub></mtd><mtd><msub><mi>y</mi><mn>3</mn></msub></mtd><mtd><mn>1</mn></mtd></mtr></mtable></mfenced><mfenced><mtable><mtr><mtd><mi>l</mi></mtd></mtr><mtr><mtd><mi>m</mi></mtd></mtr><mtr><mtd><mi>n</mi></mtd></mtr></mtable></mfenced><mo>=</mo><mo>-</mo><mfenced><mtable><mtr><mtd><msup><msub><mi>x</mi><mn>1</mn></msub><mn>2</mn></msup><mo>+</mo><msup><msub><mi>y</mi><mn>1</mn></msub><mn>2</mn></msup></mtd></mtr><mtr><mtd><msup><msub><mi>x</mi><mn>2</mn></msub><mn>2</mn></msup><mo>+</mo><msup><msub><mi>y</mi><mn>2</mn></msub><mn>2</mn></msup></mtd></mtr><mtr><mtd><msup><msub><mi>x</mi><mn>3</mn></msub><mn>2</mn></msup><mo>+</mo><msup><msub><mi>y</mi><mn>3</mn></msub><mn>2</mn></msup></mtd></mtr></mtable></mfenced></mstyle></math>","truncated":false}

{"mathml":"<math style=\"font-family:stix;font-size:16px;\" xmlns=\"http://www.w3.org/1998/Math/MathML\"><mstyle mathsize=\"16px\"><mfenced><mtable><mtr><mtd><mi>l</mi></mtd></mtr><mtr><mtd><mi>m</mi></mtd></mtr><mtr><mtd><mi>n</mi></mtd></mtr></mtable></mfenced><mo>=</mo><mo>-</mo><msup><mfenced><mtable><mtr><mtd><msub><mi>x</mi><mn>1</mn></msub></mtd><mtd><msub><mi>y</mi><mn>1</mn></msub></mtd><mtd><mn>1</mn></mtd></mtr><mtr><mtd><msub><mi>x</mi><mn>2</mn></msub></mtd><mtd><msub><mi>y</mi><mn>2</mn></msub></mtd><mtd><mn>1</mn></mtd></mtr><mtr><mtd><msub><mi>x</mi><mn>3</mn></msub></mtd><mtd><msub><mi>y</mi><mn>3</mn></msub></mtd><mtd><mn>1</mn></mtd></mtr></mtable></mfenced><mrow><mo>-</mo><mn>1</mn></mrow></msup><mfenced><mtable><mtr><mtd><msup><msub><mi>x</mi><mn>1</mn></msub><mn>2</mn></msup><mo>+</mo><msup><msub><mi>y</mi><mn>1</mn></msub><mn>2</mn></msup></mtd></mtr><mtr><mtd><msup><msub><mi>x</mi><mn>2</mn></msub><mn>2</mn></msup><mo>+</mo><msup><msub><mi>y</mi><mn>2</mn></msub><mn>2</mn></msup></mtd></mtr><mtr><mtd><msup><msub><mi>x</mi><mn>3</mn></msub><mn>2</mn></msup><mo>+</mo><msup><msub><mi>y</mi><mn>3</mn></msub><mn>2</mn></msup></mtd></mtr></mtable></mfenced></mstyle></math>","truncated":false}


htmlの表を使った行列の式の残骸w

 [x1 y1 1][l] [x1^2+y1^2]
 [x2 y2 1][m]=-[x2^2+y2^2]
 [x3 y3 1][n] [x3^2+y3^2]

 [l] [x1 y2 1]^-1[x1^2+y1^2]
 [m]=-[x2 y2 1] [x2^2+y2^2]
 [n] [x3 y3 1] [x3^2+y3^2]



0 件のコメント:

コメントを投稿