由于Unity只有4x4矩阵,今天要做一个2x2矩阵的旋转,居然忘了顺序。故写下作为模版记录。

 

顺序:

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

 

相关文章:

  • 2022-01-03
  • 2021-11-30
  • 2021-10-29
  • 2021-11-14
  • 2021-09-01
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-12-06
  • 2021-04-25
相关资源
相似解决方案