Okay, das ist etwas, das eine einfache Matrixfrage sein sollte, aber mein Verständnis von Matrizen ist etwas begrenzt. Hier ist das Szenario: Ich habe ein 1px mal 1px Sprite, das ich um einen Betrag x und y skalieren möchte (verschiedene Beträge auf jeder Seite), und dann möchte ich das Sprite um einen Winkel drehen, und dann möchte ich es können positioniere das Ganze genau (von oben links oder von der Mitte aus, macht für mich keinen Unterschied).Wie kann man eine Matrix in C# gleichzeitig drehen, skalieren und übersetzen?
Bisher ist mein Code vage nahe, aber es neigt dazu, durch eine zufällige Menge in Abhängigkeit vom Winkel ab, in dem ich passiere
Ich würde denken, dass dies würde es tun.
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);
Aber es neigt dazu, den Umfang der gedrehten Linie nach unten zu verkleinern, obwohl ich denke, dass es so richtig positioniert ist.
Ich habe auch schon versucht, diese:
Matrix m = Matrix.Transformation2D(new Vector2(center.X, center.Y), 0f,
new Vector2(width, height), new Vector2(center.X, center.Y),
angle, Vector2.Zero);
Die Linie genau richtig aussieht, mit der exakt richtigen Größe und Form, aber ich kann es nicht richtig überhaupt positionieren. Wenn ich den Übersetzungsvektor am Ende des obigen Aufrufs verwende, oder wenn ich eine Position mit Sprite.Draw einstelle, funktioniert beides nicht richtig.
Dies ist alles in SlimDX. Was mache ich falsch?
Hmm ... das scheint sehr nah zu sein. Das Übersetzen in Ursprung, Skalieren und Drehen funktioniert großartig, aber wenn ich dann versuche, den gewünschten Ort zu übersetzen, wirkt es wirklich seltsam - ich verändere das x-Koordinatensystem und es bewegt sich sowohl in x als auch in y. Ich denke, dass es im gedrehten Raum übersetzt ... – x4000
Eine andere Sache, die mir noch nicht klar ist, ist, wie man zum Ursprung übersetzt. Ich habe zwei Punkte plus ein Drittel, das in der Mitte von ihnen ist. Ich habe das Zentrum in den Ursprung übersetzt, aber sollte ich anders übersetzen? – x4000
Anstatt zurück zu übersetzen, wo Sie wollen, können Sie einfach die Position ändern, wo Sie zeichnen? –