由於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 }; }
