Показать сообщение отдельно
  #2  
Старый 18.05.2016, 07:24
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, давай подумаем.
а). Пусть у нас фигура расположена в точке C(x0,y0) и изначально смотрит "вверх" (угол поворота = 0).
б). Дана точка A(x1,y1), "лицом" к которой надо повернуть фигуру.
Что нам надо посчитать:
1. На какой угол от центра фигуры "повернута" точка A.
2. На какой относительный угол надо повернуть фигуру.
3. В зависимости от значения угла - в какую сторону надо поворачиваться.
4. Сохранить итоговый угол поворота как текущий угол поворота фигуры.

Смотрим.
1. AlphaA := arcsin(abs(x0-x)/sqrt(sqr(x0-x) + sqr(y0-y)); Тут еще надо полусферу добавлять или отнимать (3.14), если y > y0.
2. AlphaR := AlphaA - AlphaC;
3. тут тоже сам сообразишь. лень думать..
4. AlphaC := AlphaA;

ЗЫ. И не забываем, что все тригонометрические функции работают в радианах, а не в грвдусах.
ЗЗЫ. А еще проще, наверное, попробовать это сделать на FMX, там, вроде, все эти приколы уже встроенные есть.
Ответить с цитированием