1,502
社区成员
发帖
与我相关
我的任务
分享
Const Pi = 3.14159265
Private Sub Command1_Click()
Me.ScaleMode = 3
Me.Cls
Dim x As Double '圆心
Dim y As Double
Dim D As Double '中心点到圆心的距离
Dim R As Double '圆半径
Dim C As Double '中心点到焦点的距离
Dim delta As Double '弧线弧度
D = 50
R = 40
'用余弦定理得到中心到交点(花瓣尖端到中心的距离
C = (2 * D * Cos(Pi / 7) + Sqr((2 * D * Cos(Pi / 7)) ^ 2 - 4 * (D ^ 2 - R ^ 2))) / 2
'再用余弦定理得到弧线的弧度
delta = ArcCos((D ^ 2 + R ^ 2 - C ^ 2) / (2 * D * R))
Dim i As Integer
For i = 1 To 7
'画弧线
Me.Circle (Me.ScaleWidth / 2 + Cos((2 * Pi / 7) * (i - 1)) * D, Me.ScaleHeight / 2 + Sin((2 * Pi / 7) * (i - 1)) * D), R, vbRed, DblMod(((2 * Pi / 7) * (8 - i) + Pi - delta), (2 * Pi)), DblMod(((2 * Pi / 7) * (8 - i) + Pi + delta), (2 * Pi))
Next
End Sub
'浮点取模
Private Function DblMod(dbl1 As Double, dbl2 As Double)
Dim tmp As Double
tmp = Fix(dbl1 / dbl2)
DblMod = dbl1 - dbl2 * tmp
End Function
'反余弦
Function ArcCos(x As Double) As Double
If x >= -1 And x < -0.5 Then ArcCos = Atn(Sqr(1 - x * x) / x) + 4 * Atn(1)
If x >= -0.5 And x <= 0.5 Then ArcCos = -Atn(x / Sqr(1 - x * x)) + 2 * Atn(1)
If x > 0.5 And x <= 1 Then ArcCos = Atn(Sqr(1 - x * x) / x)
End Function