Я создал метод C# (с использованием библиотеки OpenTK), который вычисляет положение точки A, которая поворачивается на заданное расстояние вокруг точки B. Вращение происходит вокруг оси y (которая "вверх"). в моем игровом мире).
public static Vector3 CalculateRotationAroundPointOnAxis(Vector3 B, float distance, float
degrees)
{
// First of all: convert degrees to radians
float radians = MathHelper.DegreesToRadians(degrees % 360);
// Create a translation matrix that stores the translation from (0|0|0) to point B:
Matrix4.CreateTranslation(ref B, out translationPointMatrix);
// Create a rotation matrix for the rotation around y-axis:
Matrix4.CreateRotationY(radians, out rotationMatrix);
// Create a second translation matrix that stores the translation from point B to the rotation distance:
Matrix4.CreateTranslation(0, 0, distance, out translationMatrix);
// First apply the translation to point B, then rotate:
Matrix4.Mult(ref translationMatrix, ref rotationMatrix, out tempMatrix);
// Afterwards, apply the second translation:
Matrix4.Mult(ref tempMatrix, ref translationPointMatrix, out finalTranslationMatrix);
// Apply finalTranslationMatrix to Vector3 (0|0|0) and return the new position:
Vector3.TransformPosition(ref Vector3.Zero, ref finalTranslationMatrix, out finalTranslationPoint);
return finalTranslationPoint;
}
Я понимаю, почему матрицы нужно умножать в указанном выше порядке. Но я думаю, что весь процесс слишком дорогой! У меня так много матричных операций, и я думаю, что весь процесс можно ускорить.
Вопрос: Как я могу сделать этот алгоритм быстрее?