平成11年8月24日
[流れ星]第26回
数学的な応募問題<解答募集期間:8月14日〜8月28日>
[アルハゼンの定理の応用]
太郎さんには、中学校へ通っている子供がいます。この夏休みの宿題に、次のような円に
関する問題が出ていました。前回の
「アルハゼンの定理」の応用問題です。 [アルハゼンの定理の応用]です<浜田 明巳>さんからの解答8月23日受信
第26回数学的な応募問題
いつもの通りにパソコンのプログラム(VISUAL BASIC)で解いてみました.
問題1:単位円で考えます.M(0,−1)とし,x軸とABが平行であるとします.A,S,Rの位置を乱数で決め,それぞれの場合のB,P,Qの位置を求めます.さらに∠PSR+∠PQRを計算し,それが180°に等しいことが分かれば,四角形PQRSが円に内接することが分かります.この試行を1000回(=kaisuu)繰り返し,どんな場合でも円に内接することを示します.
問題2:単位円で考えます.x軸とABが平行であるとします.A,Pの位置を乱数で決め,それぞれの場合のB,C,D,Q,Rの位置を求めます.さらにPQ/PRを計算し,それが1に等しいことが分かれば,△PQRが二等辺三角形であることが分かります.この試行を1000回(=kaisuu)繰り返し,どんな場合でも二等辺三角形であることを示します.
問題3:実はパソコンのプログラムで解こうとしたところ,あっという間に解答が出てしまったので,プログラムを作る気力がなくなってしまいました.
円の中心をOとします.∠ADE=45°なので∠AOE=90°であり,OA=OEであるから,∠OAE=45°となるので,∠DAO=∠DAE−∠OAE=15°です.故に∠DFG=15°+90°=105°となります.アルハゼンの定理を使いませんでした.申し訳有りません.
しかしこれでは,私の気がすまないので,グラフ作成ソフトGRAPES(友田勝久氏作成,インターネットからダウンロード可能,フリーソフトです)を使って,解いてみました.答の点をマウスでなぞって,指示通りx座標を100倍すると,答の105°が出て来ます.
この図は次のように作成しました.単位円で考えます.A(0,−1),E(1,0),D(cos120°,sin120°)としたとき,直線ADとx軸のなす角が答になります.
問題4:単位円で考えます.中心をOとするとき,x軸とODのなす角tDを,90°<tD<180とします.それぞれのtDの値に対して,DF/GE=4となるAの位置を求めて,相似比を計算して,DF=8となるときのAFの長さを求めます.このプログラムにより,答は常にAF=4(p)となることが分かります.
乱数がからむ問題1と2のプログラムは見ていて面白いものです.毎回動きが違うので,見ていて思わず「がんばれ!」と言ってしまいます.
問題1プログラム
Option Explicit
Const pi = 3.14159265359
Const r = 1
Sub Form_Load()
Dim waku As Double: waku = 1.5 * r
Picture1.Scale (-waku, waku)-(waku, -waku)
End Sub
Sub Command1_Click()
'm26_1
' 弧AMの長さと弧BMの長さが等しいとき,
'四角形PQRSは円に内接していることを証明してください.
Randomize Timer
Dim j, iro0, iro1, iro2, kaisuu As Integer
iro0 = 50: iro1 = 100: iro2 = 200: kaisuu = 1000
Dim wt, wtt As Long: wtt = 150000
Dim w, tA, tB, tS, tR As Double: w = pi / 180
Dim xM, yM, xA, yA, xB, yB, xS, yS, xR, yR, xP, yP, xQ, yQ As Double
Dim dA, dS, dR As Double
Dim PS, SR, PR, PQ, QR, kakuPSR, kakuPQR, a, b, c, d, p, q, sa As Double
Dim xO, yO, rr As Double: sa = 15
xM = 0: yM = -r
tA = ((270 - sa) - (90 + 1.5 * sa)) * Rnd + (90 + 1.5 * sa)
tB = 180 - tA
tS = ((tA - sa) - (tB + 2 * sa)) * Rnd + (tB + 2 * sa)
tR = ((tS - sa) - (tB + sa)) * Rnd + (tB + sa)
dA = 2 * (1 - 2 * Rnd): dS = 2 * (1 - 2 * Rnd)
dR = 2 * (1 - 2 * Rnd)
For j = 0 To kaisuu
If j > 0 Then
dA = inf(dA + 1 - 2 * Rnd): tA = tA + dA
If tA > 270 - sa Then
tA = 270 - sa: dA = -dA
ElseIf tA < 90 + 2 * sa Then
tA = 90 + 2 * sa: dA = -dA
End If
tB = 180 - tA
dS = inf(dS + 1 - 2 * Rnd): tS = tS + dS
If tA - tS < sa Then
tS = tA - sa: dS = -dS
ElseIf tS < tB + 2 * sa Then
tS = tB + 2 * sa: dS = -dS
End If
dR = inf(dR + 1 - 2 * Rnd): tR = tR + dR
If tS - tR < sa Then tR = tS - sa: dR = -dR
If tR - tB < sa Then tR = tB + sa: dR = -dR
End If
xA = r * Cos(tA * w): yA = r * Sin(tA * w)
xB = r * Cos(tB * w): yB = r * Sin(tB * w)
xS = r * Cos(tS * w): yS = r * Sin(tS * w)
xR = r * Cos(tR * w): yR = r * Sin(tR * w)
If xS <> xM Then
a = (yS - yM) / (xS - xM): b = yM - xM * a
xP = (yA - b) / a: yP = yA
Else
xP = 0: yP = r
End If
If xR <> xM Then
a = (yR - yM) / (xR - xM): b = yM - xM * a
xQ = (yB - b) / a: yQ = yB
Else
xQ = 0: yQ = r
End If
PR = Sqr((xR - xP) * (xR - xP) + (yR - yP) * (yR - yP))
PS = Sqr((xS - xP) * (xS - xP) + (yS - yP) * (yS - yP))
SR = Sqr((xR - xS) * (xR - xS) + (yR - yS) * (yR - yS))
kakuPSR = kaku(PS, SR, PR)
PQ = Sqr((xQ - xP) * (xQ - xP) + (yQ - yP) * (yQ - yP))
QR = Sqr((xR - xQ) * (xR - xQ) + (yR - yQ) * (yR - yQ))
kakuPQR = kaku(PQ, QR, PR)
a = xP - xQ: b = yP - yQ: c = xP - xR: d = yP - yR
p = (xP * xP - xQ * xQ + yP * yP - yQ * yQ) * 0.5
q = (xP * xP - xR * xR + yP * yP - yR * yR) * 0.5
xO = (d * p - b * q) / (a * d - b * c)
yO = (a * q - c * p) / (a * d - b * c)
rr = Sqr((xP - xO) * (xP - xO) + (yP - yO) * (yP - yO))
Picture2.Cls
Picture2.Print "∠PSR+∠PQR="; shishagonyuu(kakuPSR + kakuPQR); "
°"Picture3.Cls: Picture3.Print "残り"; kaisuu - j; "回"
Picture1.Cls
Picture1.Circle (0, 0), r, iro0
Picture1.Line (xA, yA)-(xB, yB), iro1
Picture1.Line (xM, yM)-(xS, yS), iro1
Picture1.Line -(xR, yR), iro1: Picture1.Line -(xM, yM), iro1
Picture1.Line (xP, yP)-(xR, yR), iro1
Picture1.Circle (xO, yO), rr, iro2
Picture1.CurrentX = xA: Picture1.CurrentY = yA
Picture1.Print "A"
Picture1.CurrentX = xB: Picture1.CurrentY = yB
Picture1.Print "B"
Picture1.CurrentX = xM: Picture1.CurrentY = yM
Picture1.Print "M"
Picture1.CurrentX = xS: Picture1.CurrentY = yS
Picture1.Print "S"
Picture1.CurrentX = xR: Picture1.CurrentY = yR
Picture1.Print "R"
Picture1.CurrentX = xP: Picture1.CurrentY = yP
Picture1.Print "P"
Picture1.CurrentX = xQ: Picture1.CurrentY = yQ
Picture1.Print "Q"
For wt = 0 To wtt: Next
Next
End Sub
Private Sub Command2_Click()
End
End Sub
Private Function shishagonyuu(ByVal x As Double) As Double
Dim keta As Long: keta = 1000000
shishagonyuu = Int(x * keta + 0.5) / keta
End Function
Private Function kaku(ByVal a As Double, ByVal b As Double, ByVal c As Double) As Double
Dim cs As Double: cs = (a * a + b * b - c * c) / a / b * 0.5
If cs = 0 Then
kaku = 90
Else
kaku = Atn(Sqr(1 / cs / cs - 1)) / pi * 180
If cs < 0 Then kaku = 180 - kaku
End If
End Function
Private Function inf(ByVal x As Double) As Double
If Abs(x) > 2 Then inf = Sgn(x) * 2 Else inf = x
End Function
問題2プログラム
Option Explicit
Const pi = 3.14159265359
Const r = 1
Sub Form_Load()
Dim waku As Double: waku = 1.5 * r
Picture1.Scale (-waku, waku)-(waku, -waku)
End Sub
Sub Command1_Click()
'm26_2
' 弧APの長さと弧ACの長さが等しく,
'また弧BPの長さと弧BDの長さが等しいとき,
'三角形PQRは二等辺三角形であることを証明してください.
Randomize Timer
Dim j, iro0, iro1, kaisuu As Integer
iro0 = 50: iro1 = 200: kaisuu = 1000
Dim wt, wtt As Long: wtt = 200000
Dim w, tA, tB, tP, tC, tD As Double: w = pi / 180
Dim xA, yA, xB, yB, xC, yC, xD, yD, xP, yP, xQ, yQ, xR, yR As Double
Dim dA, dP, PQ, PR, a, b, sa As Double: sa = 10
tA = ((180 - sa) - (90 + sa)) * Rnd + (90 + sa)
tB = 180 - tA
tP = ((tA - sa) - (tB + sa)) * Rnd + (tB + sa)
dA = 2 * (1 - 2 * Rnd): dP = 2 * (1 - 2 * Rnd)
For j = 0 To kaisuu
If j > 0 Then
dA = inf(dA + 1 - 2 * Rnd): tA = tA + dA
If tA > 180 - sa Then
tA = 180 - sa: dA = -dA
ElseIf tA < 90 + sa Then
tA = 90 + sa: dA = -dA
End If
tB = 180 - tA
dP = inf(dP + 1 - 2 * Rnd): tP = tP + dP
If tA - tP < sa Then
tP = tA - sa: dP = -dP
ElseIf tP < tB + sa Then
tP = tB + sa: dP = -dP
End If
End If
tC = 2 * tA - tP: tD = 2 * tB - tP
xA = r * Cos(tA * w): yA = r * Sin(tA * w)
xB = r * Cos(tB * w): yB = r * Sin(tB * w)
xC = r * Cos(tC * w): yC = r * Sin(tC * w)
xD = r * Cos(tD * w): yD = r * Sin(tD * w)
xP = r * Cos(tP * w): yP = r * Sin(tP * w)
a = (yP - yC) / (xP - xC): b = yP - xP * a
xQ = (yA - b) / a: yQ = yA
a = (yP - yD) / (xP - xD): b = yP - xP * a
xR = (yB - b) / a: yR = yB
PQ = Sqr((xQ - xP) * (xQ - xP) + (yQ - yP) * (yQ - yP))
PR = Sqr((xR - xP) * (xR - xP) + (yR - yP) * (yR - yP))
Picture2.Cls
Picture2.Print "PQ / PR="; shishagonyuu(PQ / PR)
Picture3.Cls: Picture3.Print "残り"; kaisuu - j; "回"
Picture1.Cls
Picture1.Circle (0, 0), r, iro0
Picture1.Line (xA, yA)-(xB, yB), iro1
Picture1.Line (xC, yC)-(xP, yP), iro1
Picture1.Line -(xD, yD), iro1
Picture1.CurrentX = xA: Picture1.CurrentY = yA
Picture1.Print "A"
Picture1.CurrentX = xB: Picture1.CurrentY = yB
Picture1.Print "B"
Picture1.CurrentX = xC: Picture1.CurrentY = yC
Picture1.Print "C"
Picture1.CurrentX = xD: Picture1.CurrentY = yD
Picture1.Print "D"
Picture1.CurrentX = xP: Picture1.CurrentY = yP
Picture1.Print "P"
Picture1.CurrentX = xQ: Picture1.CurrentY = yQ
Picture1.Print "Q"
Picture1.CurrentX = xR: Picture1.CurrentY = yR
Picture1.Print "R"
For wt = 0 To wtt: Next
Next
End Sub
Private Sub Command2_Click()
End
End Sub
Private Function shishagonyuu(ByVal x As Double) As Double
Dim keta As Long: keta = 1000000
shishagonyuu = Int(x * keta + 0.5) / keta
End Function
Private Function inf(ByVal x As Double) As Double
If Abs(x) > 2 Then inf = Sgn(x) * 2 Else inf = x
End Function
問題4プログラム
Option Explicit
Const pi = 3.14159265359
Const r = 1
Sub Form_Load()
Dim waku As Double: waku = 1.5 * r
Picture1.Scale (-waku, waku)-(waku, -waku)
End Sub
Sub Command1_Click()
'm26_4
' 辺DF=8,辺EG=2のとき,辺AFの長さを求めてください.
Dim j, iro0, iro1, owari As Integer: iro0 = 50: iro1 = 200
Dim wt, wtt As Long: wtt = 10000000
Dim w, tA, tB, tC, tD, tE, kizami As Double
w = pi / 180: kizami = 0.1
Dim xA, yA, xB, yB, xC, yC, xD, yD, xE, yE, xF, yF, xG, yG As Double
Dim range(2), sa(2), DF, GE, AF, a, b, gosa As Double: gosa = 10 ^ (-6)
For tD = 180 - kizami To 90 + kizami Step -kizami
tE = 180 - tD
xD = r * Cos(tD * w): yD = r * Sin(tD * w)
xE = r * Cos(tE * w): yE = r * Sin(tE * w)
range(0) = tE + kizami: range(1) = tD - kizami: owari = 0
While owari = 0: range(2) = (range(0) + range(1)) * 0.5
For j = 0 To 2: tA = range(j)
tB = 2 * tD - tA: tC = 2 * tE - tA
xA = r * Cos(tA * w): yA = r * Sin(tA * w)
xB = r * Cos(tB * w): yB = r * Sin(tB * w)
xC = r * Cos(tC * w): yC = r * Sin(tC * w)
a = (yB - yA) / (xB - xA): b = yA - xA * a
xF = (yD - b) / a: yF = yD
a = (yC - yA) / (xC - xA): b = yA - xA * a
xG = (yE - b) / a: yG = yE
DF = xF - xD: GE = xE - xG
sa(j) = DF / GE - 8 / 2
Next
If Abs(sa(2)) < gosa Or range(1) - range(0) < gosa Then
owari = 1
ElseIf Sgn(sa(2) * sa(0)) < 0 Then
range(1) = range(2)
Else
range(0) = range(2)
End If
Wend
If Abs(sa(2)) < 1 Then
AF = Sqr((xF - xA) * (xF - xA) + (yF - yA) * (yF - yA))
Picture2.Cls: Picture2.Print "DF/GE ="; shishagonyuu(DF / GE)
Picture3.Cls: Picture3.Print "AF="; shishagonyuu(8 * AF / DF); "p"
Picture4.Cls: Picture4.Print "半径="; shishagonyuu(8 * r / DF); "p"
Picture1.Cls: Picture1.Circle (0, 0), r, iro0
Picture1.Line (xB, yB)-(xA, yA), iro1
Picture1.Line -(xC, yC), iro1
Picture1.Line (xD, yD)-(xE, yE), iro1
Picture1.CurrentX = xA: Picture1.CurrentY = yA
Picture1.Print "A"
Picture1.CurrentX = xB: Picture1.CurrentY = yB
Picture1.Print "B"
Picture1.CurrentX = xC: Picture1.CurrentY = yC
Picture1.Print "C"
Picture1.CurrentX = xD: Picture1.CurrentY = yD
Picture1.Print "D"
Picture1.CurrentX = xE: Picture1.CurrentY = yE
Picture1.Print "E"
Picture1.CurrentX = xF: Picture1.CurrentY = yF
Picture1.Print "F"
Picture1.CurrentX = xG: Picture1.CurrentY = yG
Picture1.Print "G"
For j = 0 To wt: Next
End If
Next
End Sub
Private Sub Command2_Click()
End
End Sub
Private Function shishagonyuu(ByVal x As Double) As Double
Dim keta As Long: keta = 100000
shishagonyuu = Int(x * keta + 0.5) / keta
End Function
<水の流れ:コメント> 8月24日
浜田さんから、パソコンのプログラム(VISUAL BASIC)を頂いていますが、
不勉強をお許しください。動画画像が皆さんに見てもらえないのが、心苦しいです。
<自宅>
mizuryu@aqua.ocn.ne.jp最初のページへもどる