вращает точку вокруг любой оси в 3D. Это мое решение для вращения в 3D с использованием аналитической геометрии и программирования для моделирования процесса. Код в JavaScript.
аю манипуляции с изображениями и хочу повернуть все пиксели в пространстве xyz на основе угла, начала координат и координат x, y и z.
Мне просто нужно настроить правильную матрицу (4х4), и тогда у меня все будет хорошо. Угол указывается в градусах, а не в радианах, а x, y, z будут от -1 до 1 (плавает)
РЕДАКТИРОВАТЬ:
Хорошо, вот код, который я набрал, чтобы сделать поворот вокруг заданной строки, определяемой началом координат и координатами X, Y, Z.
float ang = angD * (float)(Math.PI / 180); // from degrees to radians, if needed
//U = n*n(t) + cos(a)*(I-n*n(t)) + sin(a)*N(x).
var u = MatrixDouble.Identity(4); // 4x4 Identity Matrix
u = u.Multiply(Math.Cos(ang));
var n = new MatrixDouble(1, 4, new List<double> { x, y, z, 0 });
var nt = n.Transpose();
// This next part is the N(x) matrix. The data is inputted in Column
// first order and fills in the 4x4 matrix with the given 16 Doubles
var nx = new MatrixDouble(4, 4, new List<double> { 0, z, -y, 0, -z, 0, x, 0, y, -x, 0, 0, 0, 0, 0, 1 });
nx = nx.Multiply(Math.Sin(ang));
var ret = nt.Multiply(n);
ret[3, 3] = 1;
u = u.Subtract(ret);
u = ret.Add(u.Add(nx));
Это немного сложно, и я использую пользовательскую библиотеку Matrix, но ничто не должно быть слишком сложным для реализации с любой работающей Matrix lib.
Фу, много математики!