過去ログ

???
Option Explicit
Sub Macro1()
Dim Ax As Double, Ay As Double
Dim Bx As Double, By As Double
Dim Cx As Double, Cy As Double
Dim Dx As Double, Dy As Double 'BCを11:7に内分する点D
Dim Ex As Double, Ey As Doulbe 'BCを11:7に外分する点E
Dim Fx As Double, Fy As Double, Fr As Double 'DEを直径とする円
Dim Mx As Double, My As Double
Dim Nx As Double, Ny As Double
Dim Px As Double, Py As Double
Dim Qx As Double, Qy As Double, Qt As Double,
Dim Rx As Double, Ry As Double
Dim Sx As Double, Sy As Double
Dim Ax_min As Double, Ax_max As Double, Axx As Double
Dim kizami As Double, sa As Double
Dim AB As Double, AC As Double, CQ As Double, SR As Double
Dim a As Double, b As Double, c As Double, d As Double
Dim dankai As Integer
Cells(1, 1).Value = 10000
Mx = 0: My = 0
Bx = -1: By = 0
Cx = 1: Cy = 0
Dx = (7 * Bx + 11 * Cx) / (11 + 7): Dy = 0
Ex = (-7 * Bx + 11 * Cx) / (11 - 7): Ey = 0
Fx = (Dx + Ex) / 2: Fy = 0: Fr = Abs(Fx - Dx)
Randomize Timer: Qt = Rnd(1) 'Qの位置はどこでもよさそうなので
For dankai = 1 To 12
If dankai = 1 Then
kizami = 0.01: Ax_min = Dx + kizami: Ax_max = Cx - kizami
Else
Ax_min = Axx - kizami: Ax_max = Axx + kizami: kizami = kizami * 0.1
End If
For Ax = Ax_min To Ax_max Step kizami
Ay = Fy + Sqr(Fr * Fr - (Ax - Fx) * (Ax - Fx))
Qx = ((1 - Qt) * Cx + Qt * Ax) / (Qt + (1 - Qt)) 'CAをQt:(1-Qt)に内分する点
Qy = ((1 - Qt) * Cy + Qt * Ay) / (Qt + (1 - Qt))
CQ = Sqr((Qx - Cx) * (Qx - Cx) + (Qy - Cy) * (Qy - Cy))
AB = Sqr((Bx - Ax) * (Bx - Ax) + (By - Ay) * (By - Ay))
Px = ((AB - CQ) * Bx + CQ * Ax) / (CQ + (AB - CQ)) 'BAをBP:(AB-BP)=CQ:(AB-CQ)に内分する点
Py = ((AB - CQ) * By + CQ * Ay) / (CQ + (AB - CQ))
Nx = (Px + Qx) / 2: Ny = (Py + Qy) / 2
'AC:y=(Cy-Ay)/(Cx-Ax)*(x-Ax)+Ay=a*x+b
a = (Cy - Ay) / (Cx - Ax): b = a * (-Ax) + Ay
'SNM:y=(Ny-My)/(Nx-Mx)*(x-Mx)+My=c*x+d
c = (Ny - My) / (Nx - Mx): d = c * (-Mx) + My
'Sy=a*Sx+b=c*Sx+d
Sx = (d - b) / (a - c): Sy = a * Sx + b
'AB:y=(By-Ay)/(Bx-Ax)*(x-Ax)+Ay=a*x+b
a = (By - Ay) / (Bx - Ax): b = a * (-Ax) + Ay
'Ry=a*Rx+b=c*Rx+d
Rx = (d - b) / (a - c): Ry = a * Rx + b
AC = Sqr((Cx - Ax) * (Cx - Ax) + (Cy - Ay) * (Cy - Ay))
SR = Sqr((Sx - Rx) * (Sx - Rx) + (Sy - Ry) * (Sy - Ry))
sa = Abs(SR / AC - 3 / 7)
If Cells(1, 1).Value > sa Then
Cells(1, 1).Value = sa
Cells(1, 2).Value = Sqr((Rx - Mx) * (Rx - Mx) + (Ry - My) * (Ry - My)) * 7 / AC
Axx = Ax
End If
Next Ax
Next dankai
End Sub
   4月12日(木) 12:41:32     39217

過去問題一覧へ戻る