由于Unity只有4x4矩阵,今天要做一个2x2矩阵的旋转,居然忘了顺序。故写下作为模版记录。
顺序:
下面是使用其进行旋转的C#代码:
public struct Position { public int X; public int Y; public override string ToString() { return "X: " + X + " Y: " + Y; } } void OnEnable()//Execute { var position = new Position() { X = 1, Y = 0 }; var anchor = new Position() { X = 0, Y = 0 }; Debug.Log("position: " + position);//print position: X: 1 Y: 0 position = Rotation(90, position, anchor); Debug.Log("position rot: " + position);//print position rot: X: 0 Y: 1 } Position Rotation(float rotValue, Position pos, Position anchor) { var matrix00 = Mathf.Cos(rotValue * Mathf.Deg2Rad); var matrix01 = -Mathf.Sin(rotValue * Mathf.Deg2Rad); var matrix10 = Mathf.Sin(rotValue * Mathf.Deg2Rad); var matrix11 = Mathf.Cos(rotValue * Mathf.Deg2Rad); var x = (float)pos.X - anchor.X; var y = (float)pos.Y - anchor.Y; var rx = matrix00 * x + matrix01 * y; var ry = matrix10 * x + matrix11 * y; x = anchor.X + rx; y = anchor.Y + ry; var intX = Mathf.RoundToInt(x); var intY = Mathf.RoundToInt(y); return new Position() { X = intX, Y = intY }; }
时间: 2024-11-09 19:54:39