XNA的Matrix旋转2D坐标

Kation 2011-03-17 08:53:06
Vector2 now = new Vector2( x, y);
Vector2 rotation = new Vector2( rx, ry);
float r = ???F
怎么用Matrix矩阵,让now绕rotation旋转r度
...全文
200 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
feixuyue 2011-03-17
  • 打赏
  • 举报
回复
最好3d副职吧
lizhibin11 2011-03-17
  • 打赏
  • 举报
回复
不好意思,帮不上,你尝试一下那样可不可以。我查了一下xna的和这种矩阵乘法似乎不同,而是通过静态方法来创建,发两个连接你参考
http://stackoverflow.com/questions/2340303/xna-spritebatch-matrix-decompose
http://forums.create.msdn.com/forums/p/15404/81102.aspx
Kation 2011-03-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lizhibin11 的回复:]
我看了一下xna的,还真不好对应,不过前四个对应m11,m12,m21,m22这个是确定没问题的,平移那个也就是我那里的第五六个参数,似乎没地方放,xna可能有其他的处理方式来平移
[/Quote]
double m11 = Math.Cos(Rotation);
double m12 = Math.Sin(Rotation);
Matrix m = new Matrix();
m.M11 = (float)m11;
m.M12 = (float)m12;
m.M21 = -(float)m12;
m.M22 = -(float)m11;
m.Translation = new Vector3((float)(Rotation * (1 - m11 + m12)), (float)(Rotation * (1 - m12 - m11)), 0);

这样?
lizhibin11 2011-03-17
  • 打赏
  • 举报
回复
我看了一下xna的,还真不好对应,不过前四个对应m11,m12,m21,m22这个是确定没问题的,平移那个也就是我那里的第五六个参数,似乎没地方放,xna可能有其他的处理方式来平移
Kation 2011-03-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lizhibin11 的回复:]
那多出来的应该是用在3维的吧,2维只需要m11 m12 m21 m22,还有平移的,其余的带3带4的我琢磨变成1或0就可以
[/Quote]
是用在3维的,你那6个参数分别对应m什么?
我直接设置m就行了……
Kation 2011-03-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lizhibin11 的回复:]
Matrix mt = new Matrix(m11, m12, -m12, m11, rx * (1 - m11 + m12), ry * (1 - m12 - m11));
这里m11, m12, -m12, m11这是要乘的矩阵,rx * (1 - m11 + m12), ry * (1 - m12 - m11)这两个是要平移的横纵坐标,以便能围绕rotation来转。
m11 m12来……
[/Quote]

如果用
Matrix mt = new Matrix();
mt.m11 = ...
mt.m22 = ...
怎么弄,比把所有m都放入构造参数强……
lizhibin11 2011-03-17
  • 打赏
  • 举报
回复
那多出来的应该是用在3维的吧,2维只需要m11 m12 m21 m22,还有平移的,其余的带3带4的我琢磨变成1或0就可以
Kation 2011-03-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lizhibin11 的回复:]
不是六个参数吗?
[/Quote]
Windows Phone 7的Matrix要么没有参数,要么提供全部参数……
lizhibin11 2011-03-17
  • 打赏
  • 举报
回复
Matrix mt = new Matrix(m11, m12, -m12, m11, rx * (1 - m11 + m12), ry * (1 - m12 - m11));
这里m11, m12, -m12, m11这是要乘的矩阵,rx * (1 - m11 + m12), ry * (1 - m12 - m11)这两个是要平移的横纵坐标,以便能围绕rotation来转。
m11 m12来自于你要旋转的角度的正余弦。
lizhibin11 2011-03-17
  • 打赏
  • 举报
回复
不是六个参数吗?
Kation 2011-03-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lizhibin11 的回复:]
C# code

double m11 = Math.Cos(r);
double m12 = Math.Sin(r);
Matrix = new Matrix(m11, m12, -m12, m11, rx * (1 - m11 + m12), ry * (1 - m12 - m11));
[/Quote]

Matrix要求构造函数参数要么为空,要么提供全部的m……
你这些参数对应m什么的?
lizhibin11 2011-03-17
  • 打赏
  • 举报
回复

double m11 = Math.Cos(r);
double m12 = Math.Sin(r);
Matrix = new Matrix(m11, m12, -m12, m11, rx * (1 - m11 + m12), ry * (1 - m12 - m11));
lizhibin11 2011-03-17
  • 打赏
  • 举报
回复

double m11 = Math.Cos(r);
double m12 = Math.Sin(r);
mt.Matrix = new Matrix(m11, m12, -m12, m11, rx * (1 - m11 + m12), ry * (1 - m12 - m11));

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧