Здравствуйте!
Задача такова: переместить шейп из точки (X0,Y0) в точку (X,Y).
Весь код (ниже) работает, шейп движется, только вот иногда не останавливается по заданному ограничению. Дело в том что при достаточно малых приращениях ограничение не срабатывает:
при dx стремящимся к 0 shape.left стремится к shape.left (аналогично shape.top при dy->0).Т.е. движения по одому из направлений практически нет, и шейп благополучно уезжает...
Может подскажете, как обойти данную проблему... или алгоритм какой-нить подкините другой...
Спасибо.
Вот код:
'берём в событии маусдаун координаты
Private Sub Form1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
'определяем угол поворота (угол между вектором движения и осью OY)
ang = Atn((Abs(shape.left - X) / Abs(shape.top - Y)))
'определяем приращения движения (т.е. скорость движения)
dx = Abs(Sin(ang) * 10)
dy = Abs(Cos(ang) * 10)
'определяем знак приращения (по сути направление движения)
If shape.left > X Then dx = dx * (-1)
If shape.top > Y Then dy = dy * (-1)
end sub
'в таймере двигаем шейп
Private Sub Timer1_Timer()
shape.left= shape.left + dx
shape.top = shape.top + dy
'проверяем приехал ли шейп в точку (либо проехал её) (вот это самое ограничение)
If Sgn(dx) * (shape.left - X) >= 0 And Sgn(dy) * (shape.top - Y) >= 0 Then Timer1.Enabled = False
end sub