2014-12-21 3 views
1

Я хочу, чтобы линия вращалась. Я изучил pi и радианы, и я сделал свой собственный алгоритм (если я могу так назвать). Я не люблю использовать уже созданные коды из Интернета .Я хочу, чтобы открыть их в одиночку, но с использованием logic.Here является код:Вращение линии в 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 = 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 

Я хочу, чтобы повернуть линию на оси х не г (это, кажется, г) .I пересчитывается Everthing, но я не» Посмотрите, где проблема. Можете ли вы помочь мне с объясненной формулой? Спасибо.

+1

Вы сделали шаг в одной строке за раз в отладчике и посмотрели, что происходит? – Rob

ответ

2

Я считаю, что вы после следующего эффекта:

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 

Хотя технически после правильно вычисленной кривизны, более упрощенной версии линии, вращающейся вокруг оси Х.

Кроме того, не забудьте использовать режим масштабирования пикселей, а не Twips, для лучшей производительности изображения.

Смежные вопросы