如何使摆锤沿圆周摆动

时间:2014-11-25 14:07:52

标签: .net vb.net gdi+ geometry trigonometry

我试图制作一个用户输入字符串长度的钟摆。我被困在如何保持"常数"字符串长度,问题是,当字符串以一个角度放置时,字符串保持相同的长度,但由于它处于一个角度缩短,我试图用这个代码来解决这个问题:


If Angle > 0 Then
        If Angle < 50 Then
            x = Asin(Angle) * (LengthOfString + (Angle * 70))
            y = Acos(Angle) * (LengthOfString + (Angle * 70))
            e.Graphics.DrawLine(Pens.Black, 270, 0, (270 + x), (0 + y))
        Else
            x = Asin(Angle) * (LengthOfString + ((100 - Angle) * 70))
            y = Acos(Angle) * (LengthOfString + ((100 - Angle) * 70))
            e.Graphics.DrawLine(Pens.Black, 270, 0, (270 + x), (0 + y))
        End If
    Else
        Angle = Angle ^ 2
        Angle = Sqrt(Angle)
        If Angle < 50 Then
            x = Asin(Angle) * (LengthOfString + (Angle * 70))
            y = Acos(Angle) * (LengthOfString + (Angle * 70))
            e.Graphics.DrawLine(Pens.Black, 270, 0, (270 - x), (0 + y))
        Else
            x = Asin(Angle) * (LengthOfString + ((100 - Angle) * 70))
            y = Acos(Angle) * (LengthOfString + ((100 - Angle) * 70))
            e.Graphics.DrawLine(Pens.Black, 270, 0, (270 - x), (0 + y))
        End If
        End If

使用(Angle * 70)是一个完全的侥幸,我首先尝试做LengthOfString + Angle希望它的长度能解决它,这适用于字符串长度为100但是当我将其扩展为150它最终看起来像钟形曲线。

我不知道如何解决这个问题,因为对于不同的长度尺寸,它必须有所不同。

1 个答案:

答案 0 :(得分:2)

正确的公式是

        x = Sin(Angle) * LengthOfString 
        y = Cos(Angle) * LengthOfString 

0 <= Angle&lt; = 2 * pi