Хорошо, это то, что должно быть простым матричным вопросом, но мое понимание матриц несколько ограничено. Вот сценарий: у меня есть спрайт 1px на 1px, который я хочу масштабировать на некоторую величину x и y (разные суммы на каждой стороне), а затем я хочу повернуть этот спрайт на какой-то угол, а затем я хочу, чтобы точно позиционируйте все это (из верхнего левого или центра, не имеет для меня никакого значения).Как повернуть, масштабировать и перевести матрицу сразу на C#?
Пока мой код неопределенно близко, но он имеет тенденцию быть смещена на некоторую случайную величину в зависимости от угла я прохожу в
Я думаю, что это будет сделать это:.
Point center = new Point(50, 50);
float width = 60;
float height = 100;
float angle = 0.5;
Vector3 axis = new Vector3(center.X, center.Y, 0);
axis.Normalize();
Matrix m = Matrix.Scaling(width, height, 0) *
Matrix.RotationAxis(axis, angle) *
Matrix.Translation(center.X, center.Y, 0);
Но он имеет тенденцию уменьшать масштаб повернутой линии вниз, хотя я думаю, что это правильно позиционирует.
Я также попытался это:
Matrix m = Matrix.Transformation2D(new Vector2(center.X, center.Y), 0f,
new Vector2(width, height), new Vector2(center.X, center.Y),
angle, Vector2.Zero);
линия выглядит точно так, с точным нужного размера и формы, но я не могу расположить его правильно на всех. Если я использую вектор трансляции в конце вышеперечисленного вызова или если я устанавливаю позицию с помощью Sprite.Draw, то ни один из них не работает правильно.
Это все в SlimDX. Что я делаю не так?
Хм ... это похоже очень близко. Переводы в исходные, масштабные и вращающиеся шаги работают отлично, но затем, когда я пытаюсь перевести в нужное место, он действует очень странно - я меняю x coodinate, и он перемещается как в x, так и в y. Я думаю, что он переводится во вращающееся пространство ... – x4000
Еще одна вещь, которая еще не ясна для меня, - это перевести на начало. У меня есть две точки, плюс одна треть, которая находится в центре их. Я переводил центр в начало, но должен ли я переводить по-другому? – x4000
Вместо того, чтобы переводить туда, где вы хотите, можете ли вы просто изменить положение, где вы рисуете? –