Угол поворота башни танка на цель на координатной плоскости

Такая задачка на Delphi вычислить угол поворота пушки танка нацель на координатной плоскости. Пушка вращается на 360 градусов, координаты центра башни(X1, Y1) и цели(X2, Y2) известны и всегда > 0, Угол текущего поворота пушки (A) относительно оси Y также известен. На какой угол нужно повернуть башню чтобы пушка смотрела на цель? Помогите пожалуйставведите сюда описание изображения


Ответы (1 шт):

Автор решения: MBo

Единичный вектор направления пушки

dx = Cos(a)
dy = Sin(a)

Вектор цели

tx = x2 - x1
ty = y2 - y1

Угол доворота пушки

f := Math.ArcTan2(dx*ty-dy*tx, dx*tx+dy*ty);

На всякий случай добавлю: угол, под которым будет смотреть пушка:

a_new := Math.ArcTan(ty, tx);

Пример

procedure TForm2.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
   x1, y1, tx, ty: integer;
   a: Double;
begin
  x1 := Paintbox1.Width div 2;
  y1 := PaintBox1.Height div 2;
  tx := X - x1;
  ty := Y - y1;
  a := ArcTan2(ty, tx);
  Paintbox1.Canvas.FillRect(Paintbox1.ClientRect);
  Paintbox1.Canvas.Pen.Width := 3;
  Paintbox1.Canvas.Ellipse(x1-3, y1-3, x1 + 4, y1+4);
  Paintbox1.Canvas.MoveTo(x1, y1);
  Paintbox1.Canvas.LineTo(x1+Round(30*Cos(a)), y1+Round(30*Sin(a)));
end;

введите сюда описание изображения

→ Ссылка