|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Запутался в формулах :(
Всем привет.
Пытаюсь реализовать автоматический поворот фигуры "лицом" к заданной точке А(x0, y0), центр фигуры в точке В(x, y). Используя формулы для определения конца отрезка Код:
x:=x0 + cos(Angle) * Length; y:=y0 - sin(Angle) * Length; где Length - расстояние между точками А и В, определил необходимый угол поворота: Код:
Angle:=Math.ArcCos((x - x0) / Length); Angle:=Math.ArcSin((y0 - y) / Length); Потом в коде определяю, которой формулой пользоваться в зависимости от взаимного положения точек (если по иксах между ними слишком маленькое расстояние, то пользуемся формулой для игреков): Код:
if (abs(X - X0) > Eps) then dAngle:=Math.ArcCos((X - X0) / D) else dAngle:=Math.ArcSin((Y0 - Y) / D); Потом определяю более рациональное направление поворота и поворачиваю фигуру (её методы RotateLeft, RotateRight отвечают за соответствующий поворот, Angle - её текущий угол поворота): Код:
if Angle - dAngle > RotationSpeed then RotateLeft else if dAngle - Angle > RotationSpeed then RotateRight; Вроде алгебраически правильно, но фигура при выполнении однократно проворачивается кругом своей оси и неподвижно "уставляется" куда-то в угол экрана, независимо от координат точки (x0, y0). Чувствую, что это можно решить более элегантно (и корректно ), но идей никаких. Пользоваться векторной алгеброй? Тогда придется мудрить с превращением численного значения угла в векторное. Говорила мне мама математику учить... :с Ne timeas obscurum. |