В настоящее время я пытаюсь обернуть голову вокруг WPF, и я нахожусь на этапе преобразования пространств координат со структурами Matrix3D.
После понимания того, что WPF имеет различия между Point3D и Vector3D (то есть два часа, которые я никогда не вернусь ...), я могу настроить матрицу перевода. Сейчас я пытаюсь ввести матрицу вращения, но, похоже, она дает неточные результаты. Вот мой код для моего преобразования координат мира ...
private Point3D toWorldCoords(int x, int y)
{
Point3D inM = new Point3D(x, y, 0);
//setup matrix for screen to world
Screen2World = Matrix3D.Identity;
Screen2World.Translate(new Vector3D(-200, -200, 0));
Screen2World.Rotate(new Quaternion(new Vector3D(0, 0, 1), 90));
//do the multiplication
Point3D outM = Point3D.Multiply(inM, Screen2World);
//return the transformed point
return new Point3D(outM.X, outM.Y, m_ZVal);
}
Перевод работает нормально, однако поворот на 90 градусов, похоже, возвращает неточности с плавающей запятой. Строка смещения матрицы, кажется, отключена незначительным фактором (в любом случае, 0,000001), что приводит к наложению на рендеры. Я что-то здесь упускаю или мне просто нужно вручную округлить матрицу?
Приветствия