Để mở rộng nhận xét của Kylotan, Bạn có thể sử dụng các công thức 2D ở chế độ 3D. Giả sử Y lên:
tính toán vị trí của mục tiêu trong không gian X'Y'Z ', trong đó trục X' song song với hướng bay của mũi tên, trục Y 'lên và Z' vuông góc với trục X 'và Y'.
Khi bạn đã tính X 'và Y', bạn có thể chuyển đổi trở lại không gian XYZ thực
Thí dụ
Một cung thủ đang ở (1,0,1). Anh ta muốn bắn một mũi tên tới (4,0,5). Chúng tôi lấy X 'là vectơ đơn vị (0,6, 0, 0,8) vì nó trỏ trực tiếp từ nguồn đến điểm đích. Sau đó, chúng tôi lấy Z 'là (-0,8, 0, 0,6) vì nó là một hình vuông góc, nhưng vì mũi tên không di chuyển theo trục Z ,, nên chúng tôi sẽ bỏ qua nó. Vấn đề của bạn bây giờ là tìm ra cách bắn một mũi tên từ (0,0) đến (0,5) trong không gian X'Y '.
.. làm tính toán 2D ở đây. Lưu ý rằng có thể bạn sẽ muốn các hàm tham số của X 'và Y' về mặt t , biến thời gian.
Một cách để trừu tượng chuyển đổi giữa hai tọa độ là sử dụng ma trận biến đổi.
let archer = Vector3d(1.0,0.0,1.0)
let target = Vector3d(4.0,0.0,5.0)
let travel = target - archer
let transform = Matrix4d.CreateTranslation(-archer) *
Matrix4d.CreateRotationY(Math.Atan2(travel.Z,travel.X))
Vector3d.Transform(archer, transform) // transforms archer to (0,0,0)
Vector3d.Transform(target, transform) // transforms target to (5,0,0)
khi chúng tôi chuyển đổi trở lại từ X'Y'Z ' sang XYZ , đây đơn giản là một phép biến đổi tuyến tính ngược.
let inverse = Matrix4d.Invert(transform)
Vector3d.Transform(Vector3d.Zero, transform) // transforms (0,0,0) to (1,0,1)