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 ответ

Решение

Я вижу сейчас. Различие между Вектором и Точкой важно. Вместо этого я должен использовать Точки и Точки. Умножить, и тогда результаты будут такими, как я ожидал. Вектор - это разница между двумя точками, которая не зависит от перевода, в то время как точка - это конкретное местоположение, которое затрагивается.

Другие вопросы по тегам