我的游戏中目前有以下代码:
Vector2 pixelpos = new Vector2(x, y);
Vector2 center = new Vector2(t.Width / 2, t.Height / 2);
Vector2 pixelposWorld = (pixelpos - center);
float rotation = (float)Math.Atan2(pixelposWorld.Y, pixelposWorld.X);
float rotationPercent = (MathHelper.ToDegrees(rotation) / 360);
我的目标是最终将rotationPercent设置为0.0到1.0之间的值,0度为0.0,180度为0.5,360度为1.0。
目前,rotationPercent 仅显示为 1.0。
我可以做什么来解决这个问题?
最佳答案
首先,在您的情况下,无需将其转换为度数,因为 Math.aTan2 返回以弧度为单位的角度,只需将旋转变量除以 (2*Pi) 即可。
其次,检查您在“t.Width/2,t.Height/2”处做什么,因为您没有在问题中指定“t”是什么,请确保它的成员不是整数。
现在就您的问题本身而言,没有提供足够的信息。其中哪里包含您的轮换信息? “pixelpos”向量是您的世界空间位置,还是您也将其用作旋转?
回到最低限度,以下代码的工作原理大致如您所描述的那样?
Vector2 pixelpos = new Vector2(0, 1);
float rotation = (float)(Math.Atan2(pixelpos.Y, pixelpos.X) / (2 * Math.PI));
结果为 0.25 或 90 度。
关于c# - 从矢量方向获得适当的旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8200021/