Private Sub CommandButton1_Click()
Dim f1t As Single, f1 As Variant, f5t As Single, f5 As Single, fp(1000, 3) As Single
Ô = CDbl(Cells(1, 6))

a = CDbl(Cells(2, 6))

P = CDbl(Cells(3, 6))

Pi = CDbl(Cells(4, 6))
fis = CDbl(Cells(5, 6))
d0 = CDbl(Cells(6, 6))
D = CDbl(Cells(7, 6))
f = (d0 / 2) * Cos(Atn((d0 / D) / Sqr(1 - (d0 / D) ^ 2)))
z0 = -Pi / 2 - (f / (Tan(fis) * P))

r0 = CDbl(Cells(8, 6))

ksi0 = Pi / 2 - fis

xn = CDbl(Cells(9, 6))
xk = CDbl(Cells(10, 6))
step_x = CDbl(Cells(11, 6))

zn = CDbl(Cells(12, 6))
zk = CDbl(Cells(13, 6))
step_z = CDbl(Cells(14, 6))
y = CDbl(Cells(16, 6))
eps = CDbl(Cells(18, 6))
i = 0
b = False
For fun = 1 To 3
For x = xn To xk Step step_x
b = False
For z = zn To zk + step_z Step step_z

Select Case fun
Case 1
f1 = -x + a * Cos((z - z0) / P) + a * Cos(Atn(((y - Ô * Sin((z - z0) / P)) / a) / Sqr(1 - ((y - a * Sin((z - z0) / P)) / a) ^ 2)))
Case 2
f1 = Atn(1 / (r0 / x)) - P / z - Atn((r0 / Sqr(x ^ 2 + y ^ 2)) / Sqr(1 - (r0 / Sqr(x ^ 2 + y ^ 2)) ^ 2)) + (Sqr(x ^ 2 + y ^ 2) * Tan(ksi0)) + Sqr(1 - (r0 / (x ^ 2 + y ^ 2))) + z / P
Case 3
f1 = x ^ 2 + y ^ 2 - R ^ 2
End Select

If b = False And Abs(f1t) > Abs(f1) Then b = True
If b = True Then
If Abs(f1t) < Abs(f1) And Abs(f1t) < eps Then
b = False
i = i + 1
fp(i, 1) = Round(xt, 3): fp(i, 2) = Round(zt, 3): fp(i, 3) = Round(f1t, 3)
End If
End If

f1t = f1
zt = z: xt = x
Next
Next
Next

For j = 1 To i - 1
For w = j + 1 To i
If fp(j, 2) > fp(w, 2) Then
b = fp(j, 2): b = fp(j, 1): fp(j, 2) = fp(w, 2): fp(j, 1) = fp(w, 1): fp(w, 2) = b: fp(w, 1) = c
End If
Next
Next

For q = 1 To i
Cells(q, 1) = fp(q, 1)
Cells(q, 2) = fp(q, 2)
Next

j = 0

For q = 1 To i
x = fp(q, 1)
z = fp(q, 2)
f1 = -x + a * Cos((z - z0) / P) + a * Cos(Atn(((y - a * Sin((z - z0) / P)) / a) / Sqr(1 - ((y - a * Sin((z - z0) / P)) / a) ^ 2)))
f2 = Atn(1 / (r0 / x)) - P / z - Atn((r0 / Sqr(x ^ 2 + y ^ 2)) / Sqr(1 - (r0 / Sqr(x ^ 2 + y ^ 2)) ^ 2)) + (Sqr(x ^ 2 + y ^ 2) * Tan(ksi0)) + Sqr(1 - (r0 / (x ^ 2 + y ^ 2))) + z / P
f3 = x ^ 2 + y ^ 2 - R ^ 2
Lu = (f1 + f2 + Abs(f1 - f2) - Abs(f1 + f2 - Abs(f1 - f2) - f3))
If Abs(Lu) < eps Then
j = j + 1
Cells(j, 10) = x
Cells(j, 11) = z
Cells(j, 13) = Lu
End If
Next

End Sub


