Vb6 在Visual Basic 6中旋转一行

Vb6 在Visual Basic 6中旋转一行,vb6,Vb6,我想让一条线旋转。我研究了圆周率和弧度,并制定了自己的算法(如果可以这样称呼的话)。我不喜欢使用互联网上已经生成的代码。我想单独发现它们,但要用逻辑。代码如下: Dim pi As Double Dim a, b, c, d, e, x, y As Double Dim speed, radius As Integer Private Sub Form_Load() pi = 3.14159265358979 speed = 1 radius =

我想让一条线旋转。我研究了圆周率和弧度,并制定了自己的算法(如果可以这样称呼的话)。我不喜欢使用互联网上已经生成的代码。我想单独发现它们,但要用逻辑。代码如下:

Dim pi As Double
Dim a, b, c, d, e, x, y As Double
Dim speed, radius As Integer

   Private Sub Form_Load()
       pi = 3.14159265358979
       speed = 1
       radius = 600
   End Sub

   Private Sub Command1_Click()

       Timer1.Enabled = Not Timer1.Enabled
       If Timer1.Enabled = True Then
           Command1.Caption = "Stop"
       Else
           Command1.Caption = "Start"
       End If
   End Sub


   Private Sub Timer1_Timer()

       ForeColor = vbWhite
       timer1.interval=speed
       Refresh

       a = a + 2
       b = Sin((a * pi) / 180)
       c = Cos((a * pi) / 180)
       y = radius * b
       x = radius * c

       Call Label1.Move(6240 + x, 4200 + y)
       If Left(b, 1) = "-" Then
           Label1.Caption = "---"
       Else
           Label1.Caption = "+++"
       End If

       If Left(c, 1) = "-" Then
           Label1.Caption = Label1.Caption & " " & "---"
       Else
           Label1.Caption = Label1.Caption & " " & "+++"
       End If

       Line (3000 + x, 4200 + y)-(6240 + x, 4200 + y)
       Line (3000, 4200)-(3000 + x, 4200 + y)
       Line (6240, 4200)-(6240 + x, 4200 + y)

       For d = 3000 To 6240
           Line (d, 4200)-(3000 + x, 4200 + y)
       Next

       For e = 3000 + x To 6240 + x
           Line (e, 4200 + y)-(6240, 4200)
       Next

   End Sub

我想在x轴上旋转直线,而不是z轴(看起来是z轴)。我重新计算了一切,但我不知道问题出在哪里。什么是解释公式?

我相信你在追求以下效果:

Option Explicit

Dim D As Long, S As Long, Y As Long

Private Sub Command1_Click()

    Timer1.Enabled = Not Timer1.Enabled
    If Timer1.Enabled = True Then
        Command1.Caption = "Stop"
    Else
        Command1.Caption = "Start"
    End If

End Sub

Private Sub Form_Load()

    D = 1 'Start going down; change to 0 to start going up instead
    Y = 100 'Mid point

End Sub

Private Sub Timer1_Timer()

    If S Then
        If S = 8 Then
            S = 0
        Else
            S = S + 1
            lblRate = "0"
            Exit Sub
        End If
    End If
    Refresh
    If D Then
        If Y < 200 Then
            Select Case Y
            Case Is < 20
                'Begin to accelerate
                Y = Y + 1
                lblRate = "+1"
            Case Is < 40
                'Continue to accelerate
                Y = Y + 2
                lblRate = "+2"
            Case Is < 160
                'Set acceleration to peak
                Y = Y + 3
                lblRate = "+3"
            Case Is < 180
                'Begin to decelerate
                Y = Y + 2
                lblRate = "+2"
            Case Else
                'Continue to decelerate
                Y = Y + 1
                lblRate = "+1"
            End Select
        Else
            'Stop and reverse direction
            D = 0
            S = 1
            lblRate = "0"
        End If
    Else
        If Y > 0 Then
            Select Case Y
            Case Is < 20
                'Begin to accelerate
                Y = Y - 1
                lblRate = "-1"
            Case Is < 40
                'Continue to accelerate
                Y = Y - 2
                lblRate = "-2"
            Case Is < 160
                'Set acceleration to peak
                Y = Y - 3
                lblRate = "-3"
            Case Is < 180
                'Begin to decelerate
                Y = Y - 2
                lblRate = "-2"
            Case Else
                'Continue to decelerate
                Y = Y - 1
                lblRate = "-1"
            End Select
        Else
            'Stop and reverse direction
            D = 1
            S = 1
        End If
    End If
    Line (120, 100)-(120, Y)

End Sub
选项显式
D长,S长,Y长
专用子命令1_Click()
Timer1.Enabled=未启用Timer1.Enabled
如果Timer1.Enabled=True,则
Command1.Caption=“停止”
其他的
Command1.Caption=“开始”
如果结束
端接头
专用子表单_加载()
D=1'开始下降;改为0以开始启动
Y=100'中点
端接头
专用子定时器1_Timer()
如果是那么
如果S=8,则
S=0
其他的
S=S+1
lblRate=“0”
出口接头
如果结束
如果结束
刷新
如果是D那么
如果Y<200,则
选择案例Y
病例<20例
"开始加速"
Y=Y+1
lblRate=“+1”
病例<40
继续加快,
Y=Y+2
lblRate=“+2”
病例<160
'将加速度设置为峰值
Y=Y+3
lblRate=“+3”
病例<180
“开始减速
Y=Y+2
lblRate=“+2”
其他情况
继续减速,
Y=Y+1
lblRate=“+1”
结束选择
其他的
“停止并反转方向
D=0
S=1
lblRate=“0”
如果结束
其他的
如果Y>0,则
选择案例Y
病例<20例
"开始加速"
Y=Y-1
lblRate=“-1”
病例<40
继续加快,
Y=Y-2
lblRate=“-2”
病例<160
'将加速度设置为峰值
Y=Y-3
lblRate=“-3”
病例<180
“开始减速
Y=Y-2
lblRate=“-2”
其他情况
继续减速,
Y=Y-1
lblRate=“-1”
结束选择
其他的
“停止并反转方向
D=1
S=1
如果结束
如果结束
线(120100)-(120,Y)
端接头
虽然从技术上讲,它并不遵循正确计算的曲率,但它更像是绕X轴旋转的直线的简化版本


此外,确保使用像素比例模式,而不是Twips模式,以获得更好的绘图性能。

您是否在调试器中一次一行地进行调试并观察了发生的情况?