Как я могу преобразовать точку 2D (или 3D с Z = 0) в точку 2D (где Z игнорируется) с матрицей 4D?
Я использую Microsoft Silverlight для проецирования 2D-элемента управления как псевдо3D с использованием Matrix3D определение Matrix3D
Я знаю начальную 2D-координату точки в непреобразованном элементе управления, и мне нужна 2D-позиция точки после преобразования.
API Silverlight скудно относится к 3D-методам.
Пожалуйста, предложите базовую математику для выполнения расчета.
Это продолжение silverlight конкретный вопрос
Изменить дополнительные сведения
это не работает. я использую
x = x0 * matrix[0][0] + y0 * matrix[1][0] + z0 * matrix[2][0] +
w0 * matrix[3][0];
y = x0 * matrix[0][1] + y0 * matrix[1][1] + z0 * matrix[2][1] +
w0 * matrix[3][1];
z = x0 * matrix[0][2] + y0 * matrix[1][2] + z0 * matrix[2][2] +
w0 * matrix[3][2];
и вход x и y равен 0,0, а результат x, y равен 0, 58,5786, матрица
HasInverse true bool
IsIdentity false bool
M11 1.0 double
M12 0.0 double
M13 0.0 double
M14 0.0 double
M21 0.0 double
M22 0.70710676908493042 double
M23 0.70710676908493042 double
M24 0.0 double
M31 0.0 double
M32 -0.70710676908493042 double
M33 0.70710676908493042 double
M34 0.0 double
M44 1.0 double
OffsetX 0.0 double
OffsetY 58.578643798828125 double
OffsetZ -141.42135620117187 double
который производит поворот на угол 45 градусов по Z, где точка вращения является нижней частью плоскости.
все значения M1n, включая OffsetX, равны 0,0, в результате чего x всегда является исходным значением.
Что я делаю неправильно ?
Вот мои четыре примера значений с результатами приведенной выше математики.
0, 0, 0, 1 -> 0, 58.5786437988281, -141.421356201172, 1
50, 0, 0, 1 -> 50, 58.5786437988281, -141.421356201172, 1
0, 100, 0, 1 -> 0, 129.289320707321, -70.7106792926788, 1
100, 100, 0, 1 -> 100, 129.289320707321, -70.7106792926788, 1
Глядя на полученное изображение, плоскость 400x400 имеет верхний левый угол 45 135 и верхний правый угол 355 135, нижний левый угол 0,400 и нижний правый угол 400 400.
поэтому для тестового значения 0,0,0,1.0 я бы ожидал, что x и y равны 45 135