⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tracking.frm

📁 vb 调用matlab方法实例
💻 FRM
📖 第 1 页 / 共 2 页
字号:
      R(2, 1) = uminus(msin(alphaR))
      R(2, 2) = mcos(alphaR)
      R = inv(R)
  
     
     
   ' transformation
   dataP_angle = mtimes(P, dataP)
   For i = 1 To 9
       dataP_x(1, i) = dataP_angle(1, i).Simple + xP
       dataP_y(1, i) = dataP_angle(2, i).Simple + yP
   Next
   
   dataR_angle = mtimes(R, dataR)
   For i = 1 To 7
       dataR_x(1, i) = dataR_angle(1, i).Simple + xR
       dataR_y(1, i) = dataR_angle(2, i).Simple + yR
   Next
   
   trace_Px(1, 1) = xPold
   trace_Px(1, 2) = xP
   trace_Py(1, 1) = yPold
   trace_Py(1, 2) = yP
   trace_Rx(1, 1) = xRold
   trace_Rx(1, 2) = xR
   trace_Ry(1, 1) = yRold
   trace_Ry(1, 2) = yR

   
   mset Plane, "XData", dataP_x, "YData", dataP_y
   tmpP = mline("XData", trace_Px, "YData", trace_Py, "Color", "white", "LineWidth", 0.05, "erasemode", "none")
      
   mset Rocket, "XData", dataR_x, "YData", dataR_y
   tmpR = mline("XData", trace_Rx, "YData", trace_Ry, "Color", "red", "LineWidth", 0.05, "erasemode", "none")
   
   
   vbrefresh
   
   xPold = xP
   yPold = yP
   xRold = xR
   yRold = yR


  If (xP < axParameters(1, 1).Simple) Or (xP > axParameters(1, 2).Simple) Or (yP < axParameters(1, 3).Simple) Or (yP > axParameters(1, 4).Simple) Then
      axis ("auto")
      tmp1 = mget(gca, "XLim")
      tmp2 = mget(gca, "YLim")
      axParameters(1, 1) = tmp1(1, 1)
      axParameters(1, 2) = tmp1(1, 2)
      axParameters(1, 3) = tmp2(1, 1)
      axParameters(1, 4) = tmp2(1, 2)
      axis (axParameters)
      vbrefresh
   End If
Loop


If (t >= maxT) Then
   cla (ax)
   MsgBox "A rocket didn't hit the target. Try to increase maximal time or rocket speed ", 32, "!! Warning !!"
   
ElseIf Not ((xP < axParameters(1, 1).Simple) Or (xP > axParameters(1, 2).Simple) Or (yP < axParameters(1, 3).Simple) Or (yP > axParameters(1, 4).Simple)) Then
   tmp = plot(xP, yP, "h", "MarkerSize", 10, "Color", "red", "erasemode", "none")
   vbrefresh
   tmp = plot(xP, yP, "h", "MarkerSize", 15, "Color", "red", "erasemode", "none")
   vbrefresh
   tmp = plot(xP, yP, "h", "MarkerSize", 20, "Color", "red", "erasemode", "none")
End If
   
hold ("off")

  
End Sub

Sub demo2()

Dim Rocket(1 To 4) As Variant

  dataR_x = zeros(1, 2)
  dataR_y = zeros(1, 2)
  dataR = zeros(2, 2)
  R = zeros(2, 2)
  trace_Rx = zeros(1, 2)
  trace_Ry = zeros(1, 2)

  vel = 10
  vel_1 = select_R1.Value
  vel_2 = select_R2.Value
  vel_3 = select_R3.Value
  vel_4 = select_R4.Value


  dist = 150
 
  X = zeros(1, 4)
  Y = zeros(1, 4)
  xold = zeros(1, 4)
  yold = zeros(1, 4)

  
  X(1, 1) = 0
  Y(1, 1) = 0
  X(1, 2) = dist
  Y(1, 2) = 0
  X(1, 3) = dist
  Y(1, 3) = dist
  X(1, 4) = 0
  Y(1, 4) = dist

  maxT = str2num(text_Mtime).Simple
   If IsEmpty(maxT) Then
        maxT = 60
        text_Mtime.Text = 60
   End If
   
  velX = zeros(1, 4)
     velX(1, 1) = vel
     velX(1, 3) = -vel
     
  velY = zeros(1, 4)
     velY(1, 2) = vel
     velY(1, 4) = -vel

  vel = zeros(1, 4)
    vel(1, 1) = vel_1
    vel(1, 2) = vel_2
    vel(1, 3) = vel_3
    vel(1, 4) = vel_4


  dd = times(100, ones(1, 1))
  t = 0
  dt = 0.2



  hold ("on")
  axParameters = zeros(4)
      axParameters(2) = dist
      axParameters(4) = dist
      axis (axParameters)

dx = zeros(1, 4)
dy = zeros(1, 4)

'Rocket graphical data
  dataR(1, 1) = 0
  dataR(1, 2) = 3.5
  dataR(1, 3) = 0
  dataR(1, 4) = 0
  

For i = 1 To 4
   dataR_x(1, 1) = X(i)
   dataR_x(1, 2) = plus(X(i), 3.5)
   dataR_y(1, 1) = Y(i)
   dataR_y(1, 2) = Y(i)
   Rocket(i) = mline("XData", dataR_x, "YData", dataR_y, "Color", "red", "LineWidth", 2, "Erasemode", "none")
      
   xold(i) = X(i)
   yold(i) = Y(i)
Next


Do While (dd.Simple > 4) And (t < maxT)
   'mmax(vel)
   
   X = plus(X, times(velX, dt))
   Y = plus(Y, times(velY, dt))

   dx(1, 1) = X(1, 1).Simple - X(1, 2).Simple
   dy(1, 1) = Y(1, 1).Simple - Y(1, 2).Simple
   dx(1, 2) = X(1, 2).Simple - X(1, 3).Simple
   dy(1, 2) = Y(1, 2).Simple - Y(1, 3).Simple
   dx(1, 3) = X(1, 3).Simple - X(1, 4).Simple
   dy(1, 3) = Y(1, 3).Simple - Y(1, 4).Simple
   dx(1, 4) = X(1, 4).Simple - X(1, 1).Simple
   dy(1, 4) = Y(1, 4).Simple - Y(1, 1).Simple

   d = power((plus(times(dx, dx), times(dy, dy))), 0.5)

   velX = rdivide(times(uminus(vel), dx), d)
   velY = rdivide(times(uminus(vel), dy), d)

   dd = mmin(d)
   
   t = t + dt
   
   'visualization
   For i = 1 To 4
     If dx(1, i).Simple = 0 Then
        alphaR = pi / 2 * sign(dy(1, i)).Simple
     Else
        alphaR = atan(dy(1, i).Simple / dx(1, i).Simple).Simple
        If (alphaR < 0) And (dy(1, i).Simple < 0) And (dx(1, i).Simple > 0) Then
           alphaR = alphaR + pi
        ElseIf (alphaR > 0) And (dy(1, i).Simple > 0) And (dx(1, i).Simple > 0) Then
           alphaR = alphaR + pi
        End If
     End If
    
    
      R(1, 1) = mcos(alphaR)
      R(1, 2) = msin(alphaR)
      R(2, 1) = uminus(msin(alphaR))
      R(2, 2) = mcos(alphaR)
      R = inv(R)
  
     
   ' transformation
   
   dataR_angle = mtimes(R, dataR)
   For ii = 1 To 2
       dataR_x(1, ii) = dataR_angle(1, ii).Simple + X(1, i).Simple
       dataR_y(1, ii) = dataR_angle(2, ii).Simple + Y(1, i).Simple
   Next ii
   
   trace_Rx(1, 1) = xold(i)
   trace_Rx(1, 2) = X(i)
   trace_Ry(1, 1) = yold(i)
   trace_Ry(1, 2) = Y(i)

   mset Rocket(i), "XData", dataR_x, "YData", dataR_y
   tmpR = mline("XData", trace_Rx, "YData", trace_Ry, "Color", "red", "LineWidth", 0.05, "erasemode", "none")
     
     xold(i) = X(i)
     yold(i) = Y(i)
   Next i
   
  vbrefresh
  'pause (0.04)
Loop

maxVi = 1
If (vel_1 > vel_4) And (vel_1 > vel_3) And (vel_1 > vel_2) Then maxVi = 2
If (vel_2 > vel_4) And (vel_2 > vel_3) And (vel_2 > vel_1) Then maxVi = 3
If (vel_3 > vel_4) And (vel_3 > vel_1) And (vel_3 > vel_2) Then maxVi = 4
If (vel_4 > vel_1) And (vel_4 > vel_3) And (vel_4 > vel_2) Then maxVi = 1

If (t >= maxT) Then
   cla (ax)
   MsgBox "A rocket didn't hit the target. Try to increase maximal time or rocket speed ", 32, "!! Warning !!"
   
Else
   tmp = plot(X(1, maxVi).Simple, Y(1, maxVi).Simple, "h", "MarkerSize", 10, "Color", "red", "erasemode", "none")
   vbrefresh
   tmp = plot(X(1, maxVi).Simple, Y(1, maxVi).Simple, "h", "MarkerSize", 15, "Color", "red", "erasemode", "none")
   vbrefresh
   tmp = plot(X(1, maxVi).Simple, Y(1, maxVi).Simple, "h", "MarkerSize", 20, "Color", "red", "erasemode", "none")
End If
   
hold ("off")



End Sub


Sub demo3()
  
P = select_p.Value
e = select_e.Value / 100

phi_step = pi / 120

If e = 0 Then
   axis ("auto")
   axis ("equal")
   phi_start = -pi
   phi_end = pi
ElseIf e < 1 Then
   axis ("auto")
   axis ("equal")
   phi_start = -pi
   phi_end = pi
ElseIf e = 1 Then
   axis ("auto")
   axis ("equal")
   phi_start = -pi / 1.2
   phi_end = pi / 1.2
ElseIf e > 1 Then
   axis ("auto")
   axis ("equal")
   phi_start = -pi / 1.5
   phi_end = pi / 1.5
End If

phi = linspace(phi_start, phi_end, 1000)

R = rdivide(times(P, ones(1, 1000)), plus(1, times(e, mcos(phi))))


hold ("on")

 cr = (Rnd * 7 + 2) / 10
 cg = (Rnd * 7 + 2) / 10
 cb = (Rnd * 7 + 2) / 10

 c = zeros(1, 1)
 c(1) = cr
 c(2) = cg
 c(3) = cb

 a = polar(0, 0, ".", "MarkerSize", 30, "color", "blue")
 orb = polar(phi, R, "LineWidth", 1.5, "color", c)

 
hold ("off")
End Sub


Private Sub check_zoom_Click()
 If check_zoom.Value = 1 Then
  Zoom ("on")
 Else
  Zoom ("off")
 End If
  
End Sub

Private Sub Clear_Button_Click()
   
   cla (ax)
   
End Sub

Private Sub Form_Load()
   
  Dim axColor(1, 1 To 3) As Double
   
  pi = 3.14159
   
  selectMode.AddItem ("Rocket & Plane")
  selectMode.AddItem ("Four Rockets")
  selectMode.AddItem ("Orbits")
  selectMode.ListIndex = 0
   
  select_Rvel.Min = 1
  select_Rvel.Max = 50
  select_Rvel.Value = 25
     
  select_Pvel.Min = 1
  select_Pvel.Max = 50
  select_Pvel.Value = 15
  
  select_R1.Min = 1
  select_R2.Min = 1
  select_R3.Min = 1
  select_R4.Min = 1
  select_R1.Max = 20
  select_R2.Max = 20
  select_R3.Max = 20
  select_R4.Max = 20
  select_R1.Value = 10
  select_R2.Value = 10
  select_R3.Value = 10
  select_R4.Value = 10
  text_R1.Caption = 10
  text_R2.Caption = 10
  text_R3.Caption = 10
  text_R4.Caption = 10
  
  select_p.Min = 5
  select_p.Max = 30
  select_p.Value = 10
  select_e.Min = 0
  select_e.Max = 150
  select_e.Value = 100
  text_p = 10
  text_e = 1
  
  text_Rvel.Caption = 25
  text_Pvel.Caption = 15
  
  ax = vbaxes(Window.hWnd)
  mset ax, "Box", "off"
  axColor(1, 1) = 0
  axColor(1, 2) = 0.3
  axColor(1, 3) = 0
  mset ax, "Color", axColor
   
  main_form.Show
  hlpDlg.Show

End Sub


Private Sub INFO_Button_Click()
   hlpDlg.Show
End Sub


Private Sub Process_Button_Click()
   
  Process_Button.Enabled = False
  
  Select Case selectMode.ListIndex
     Case 0
       Call demo1
     Case 1
       Call demo2
     Case 2
       Call demo3
  End Select
 
  Process_Button.Enabled = True
  
End Sub


Private Sub Quit_Button_Click()

  End
  
End Sub

Private Sub select_e_Change()
  text_e.Caption = select_e.Value / 100
End Sub

Private Sub select_p_Change()
   text_p.Caption = select_p.Value
End Sub

Private Sub select_Pvel_Change()

    text_Pvel.Caption = select_Pvel.Value
    
End Sub


Private Sub select_R1_Change()
   text_R1.Caption = select_R1.Value
End Sub

Private Sub select_R2_Change()
   text_R2.Caption = select_R2.Value
End Sub


Private Sub select_R3_Change()
   text_R3.Caption = select_R3.Value
End Sub


Private Sub select_R4_Change()
   text_R4.Caption = select_R4.Value
End Sub


Private Sub select_Rvel_Change()

 text_Rvel.Caption = select_Rvel.Value

End Sub


Private Sub selectMode_Click()

  Select Case selectMode.ListIndex
      Case 0
        label_Pvel.Visible = True
        label_Rvel.Visible = True
        select_Pvel.Visible = True
        select_Rvel.Visible = True
        text_Pvel.Visible = True
        text_Rvel.Visible = True
        select_Ptr1.Visible = True
        select_Ptr2.Visible = True
        select_Ptr3.Visible = True
        label_Mtime.Visible = True
        text_Mtime.Visible = True
        
        
        Label_R(0).Visible = False
        Label_R(1).Visible = False
        Label_R(2).Visible = False
        Label_R(3).Visible = False
        text_R1.Visible = False
        text_R2.Visible = False
        text_R3.Visible = False
        text_R4.Visible = False
        select_R1.Visible = False
        select_R2.Visible = False
        select_R3.Visible = False
        select_R4.Visible = False
        
        label_Or(0).Visible = False
        label_Or(1).Visible = False
        label_Or(2).Visible = False
        select_p.Visible = False
        select_e.Visible = False
        text_p.Visible = False
        text_e.Visible = False
        
    Case 1
        label_Pvel.Visible = False
        label_Rvel.Visible = False
        select_Pvel.Visible = False
        select_Rvel.Visible = False
        text_Pvel.Visible = False
        text_Rvel.Visible = False
        select_Ptr1.Visible = False
        select_Ptr2.Visible = False
        select_Ptr3.Visible = False
        label_Mtime.Visible = True
        text_Mtime.Visible = True

        
        Label_R(0).Visible = True
        Label_R(1).Visible = True
        Label_R(2).Visible = True
        Label_R(3).Visible = True
        text_R1.Visible = True
        text_R2.Visible = True
        text_R3.Visible = True
        text_R4.Visible = True
        select_R1.Visible = True
        select_R2.Visible = True
        select_R3.Visible = True
        select_R4.Visible = True

        label_Or(0).Visible = False
        label_Or(1).Visible = False
        label_Or(2).Visible = False
        select_p.Visible = False
        select_e.Visible = False
        text_p.Visible = False
        text_e.Visible = False

      Case 2
        label_Pvel.Visible = False
        label_Rvel.Visible = False
        select_Pvel.Visible = False
        select_Rvel.Visible = False
        text_Pvel.Visible = False
        text_Rvel.Visible = False
        select_Ptr1.Visible = False
        select_Ptr2.Visible = False
        select_Ptr3.Visible = False
        label_Mtime.Visible = False
        text_Mtime.Visible = False

        Label_R(0).Visible = False
        Label_R(1).Visible = False
        Label_R(2).Visible = False
        Label_R(3).Visible = False
        text_R1.Visible = False
        text_R2.Visible = False
        text_R3.Visible = False
        text_R4.Visible = False
        select_R1.Visible = False
        select_R2.Visible = False
        select_R3.Visible = False
        select_R4.Visible = False

        label_Or(0).Visible = True
        label_Or(1).Visible = True
        label_Or(2).Visible = True
        select_p.Visible = True
        select_e.Visible = True
        text_p.Visible = True
        text_e.Visible = True


   End Select
   
   hlpDlg.Show

End Sub


Private Sub selectMode_GotFocus()
  cla (ax)
End Sub


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -