Угол поворота башни танка на цель на координатной плоскости
Такая задачка на 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;
