Vector.Multiply игнорирует значения смещения матрицы
Насколько я понимаю, классы преобразования WPF состоят в том, что класс Matrix представляет собой основную матрицу 3x3 двумерных гомогенизированных координат, где последний столбец всегда (0,0,1)
, Я понимаю, что причина этого дизайна заключается в том, чтобы облегчить переводы в виде умножения матриц, так же, как преобразования поворота, масштабирования и перекоса, а не отдельно как векторы, что должно было бы иметь место, если бы использовались матрицы 2x2.
Поэтому я ожидаю, что при умножении вектора на матрицу, содержащую перевод, результирующий вектор должен быть переведен. Похоже, что это не происходит для меня при использовании матричных классов WPF, так что я делаю не так?
Matrix m = new Matrix();
m.Translate(12, 34);
Vector v = new Vector(100, 200);
Vector r = Vector.Multiply(v, m);
// Confirm that the matrix was translated correctly
Debug.WriteLine(m);
// Confirm that the vector has been translated
Debug.WriteLine(r);
Результаты:
1,0,0,1,12,34 // Matrix contains translation as expected
100,200 // Vector is unchanged - not expected
1 ответ
Я вижу сейчас. Различие между Вектором и Точкой важно. Вместо этого я должен использовать Точки и Точки. Умножить, и тогда результаты будут такими, как я ожидал. Вектор - это разница между двумя точками, которая не зависит от перевода, в то время как точка - это конкретное местоположение, которое затрагивается.