回答編集履歴

1

追記

2018/10/29 02:27

投稿

Zuishin
Zuishin

スコア28662

test CHANGED
@@ -13,3 +13,67 @@
13
13
  この Px, Py に三角形の各頂点の座標を代入すると、三つの連立方程式ができます。
14
14
 
15
15
  これを解いてください。
16
+
17
+
18
+
19
+ #追記
20
+
21
+ C# では a^2 は a の排他的論理和になります。
22
+
23
+ a の二乗は Math.Pow(a, 2) ですが、長いのでここでは便宜的に a^2 で二乗を表すとして説明します。
24
+
25
+
26
+
27
+ 三点を代入すると次の三つの方程式が得られます。
28
+
29
+ (1) (x - Ox)^2 + (y - Oy)^2 = r^2
30
+
31
+ (2) (x1 - Ox)^2 + (y1 - Oy)^2 = r^2
32
+
33
+ (3) (x2 - Ox)^2 + (y2 - Oy)^2 = r^2
34
+
35
+
36
+
37
+ (1) の式を「Ox=...」の形で表します。
38
+
39
+ (x - Ox)^2 = r^2 - (y - Oy)^2
40
+
41
+ x - Ox = Sqrt(r^2 - (y - Oy)^2)
42
+
43
+ Ox = x - Sqrt(r^2 - (y - Oy)^2)
44
+
45
+
46
+
47
+ これを (2) と (3) に代入します。
48
+
49
+ (2´) (x1 - (x - Sqrt(r^2 - (y - Oy)^2)))^2 + (y1 - Oy)^2 = r^2
50
+
51
+ (3´) (x2 - (x - Sqrt(r^2 - (y - Oy)^2)))^2 + (y2 - Oy)^2 = r^2
52
+
53
+ これで Ox が消え、変数は 3 つから 2 つになり、連立方程式も二つになりました。
54
+
55
+
56
+
57
+ 同様に Oy を消し、一つの方程式 (3´´) にしてください。
58
+
59
+ そうすると r が求められます。
60
+
61
+ 求めた r を (2´) に代入すると Oy が求められます。
62
+
63
+ Oy と r を (1) に代入すると Ox が求められます。
64
+
65
+
66
+
67
+ プログラムで表現するには、まず紙の上で計算して (3´´) の式を作り、変形して r を戻り値として返す関数にします。
68
+
69
+ そこに x, y, x1, y1, x2, y2 を引数として与えると、r が求められます。
70
+
71
+
72
+
73
+ 次に (2´) から x, y, x1, y1, x2, y2, r を引数として与えると Oy を戻す関数を作ります。
74
+
75
+ 最後に (1) から x, y, x1, y1, x2, y2, r, Oy を引数として与えると Ox を戻す関数を作ります。
76
+
77
+
78
+
79
+ これですべて求められました。