【问题标题】:Getting the position of the the tip of a sprite, while rotated在旋转时获取精灵尖端的位置
【发布时间】:2018-05-20 13:26:55
【问题描述】:

我想获得精灵旋转时的位置, Example

较大的点是我想要获得的位置(旋转时),并且精灵被旋转了,所以很难获得,而且我不知道如何获得它,任何人的原点都是(0,0)问,是否需要做任何数学运算才能得到这个?

【问题讨论】:

  • 小点是原点
  • 你可能想研究一些三角函数。试试这个:academo.org/demos/rotation-about-point
  • @OptimisticPeach 有这方面的编码数学视频吗?
  • 不是,我可以找到,而是尝试this 或我的created。请注意,第一个是 C++,但应该很容易移植。

标签: c# xna sprite monogame


【解决方案1】:

您需要做的是创建一个从原点到旋转点的Vector2旋转之前,然后旋转该向量。

例如,假设我们有一个以原点为中心的精灵,我们想知道当精灵旋转时前点在哪里。

首先,创建一个从原点到要在未旋转精灵上旋转的点的向量。在这种情况下,它可能会在中心右侧 20 像素处:

var vector = new Vector2(20, 0);

现在我们可以用这个简单的函数来旋转我们的向量(借用MonoGame.Extended

public static Vector2 Rotate(Vector2 value, float radians)
{
    var cos = (float) Math.Cos(radians);
    var sin = (float) Math.Sin(radians);
    return new Vector2(value.X*cos - value.Y*sin, value.X*sin + value.Y*cos);
}.

现在我们可以像这样得到我们的旋转向量:

var radians = MathHelper.ToRadians(degrees: -33);
var rotatedVector = Rotate(vector, radians);

为了让这个向量回到“精灵”空间,我们可以将它添加回我们的原点:

var point = origin + rotatedVector;

或者,如果您希望它在“世界”空间中,您也可以将其添加到您的精灵位置。

var worldPoint = position + origin + rotatedVector;

编码愉快!

【讨论】:

  • 我不知道人们是怎么做到这一点的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2014-01-24
相关资源
最近更新 更多