вращает точку вокруг любой оси в 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.

Фу, много математики!

Ответы на вопрос(0)

Ваш ответ на вопрос