Được rồi, đây là một cái gì đó mà nên là một câu hỏi ma trận đơn giản, nhưng sự hiểu biết của tôi về ma trận là hơi hạn chế. Đây là kịch bản: Tôi có một sprite 1px x 1px mà tôi muốn chia tỷ lệ bởi số tiền x và y (số tiền khác nhau ở mỗi bên), và sau đó tôi muốn xoay sprite theo một góc nào đó, và sau đó tôi muốn có thể chính xác vị trí toàn bộ điều (từ phía trên bên trái hoặc trung tâm, làm cho không có sự khác biệt với tôi).Làm thế nào để xoay, chia tỷ lệ và dịch một ma trận cùng một lúc trong C#?
Cho đến nay mã của tôi là mơ hồ gần, nhưng nó có xu hướng được tắt bởi một số lượng ngẫu nhiên tùy thuộc vào góc tôi vượt qua trong
tôi sẽ nghĩ rằng điều này sẽ làm điều đó:.
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);
Nhưng nó có xu hướng thu nhỏ quy mô của đường dây xoay xuống, mặc dù tôi nghĩ nó định vị nó đúng.
Tôi cũng đã thử điều này:
Matrix m = Matrix.Transformation2D(new Vector2(center.X, center.Y), 0f,
new Vector2(width, height), new Vector2(center.X, center.Y),
angle, Vector2.Zero);
Dòng trông giống hệt phải, với kích thước phù hợp chính xác và hình dạng, nhưng tôi không thể vị trí của nó một cách chính xác cả. Nếu tôi sử dụng vector dịch ở cuối cuộc gọi ở trên, hoặc nếu tôi đặt một vị trí bằng cách sử dụng Sprite.Draw, không hoạt động đúng.
Đây là tất cả trong SlimDX. Tôi đang làm gì sai?
Hmm ... điều này có vẻ rất gần. Các bước dịch gốc, tỉ lệ và xoay hoạt động rất tốt, nhưng sau đó khi tôi cố dịch sang vị trí mong muốn nó hoạt động thực sự lạ - tôi thay đổi x coodinate, và nó di chuyển trong cả x và y. Tôi nghĩ rằng nó đang dịch trong không gian xoay ... – x4000
Một điều chưa rõ ràng đối với tôi là làm thế nào để dịch sang nguồn gốc. Tôi có hai điểm, cộng thêm một điểm thứ ba ở giữa họ. Tôi đã dịch trung tâm sang nguồn gốc, nhưng tôi có nên dịch theo cách khác không? – x4000
Thay vì dịch lại về nơi bạn muốn, bạn có thể thay đổi vị trí của nơi bạn vẽ không? –