从矢量方向得到适当的旋转
本文关键字:旋转 方向 | 更新日期: 2023-09-27 18:15:24
我目前在我的游戏中有这样的代码:
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.w ewidth/2, t.h eheight/2"做什么,因为你没有在你的问题中指定't'是什么,确保它的成员不是整数。
现在就你的问题本身而言,没有提供足够的信息。这在哪里包含你的轮换信息?"像素点"向量是你的世界空间位置,还是你也用它作为旋转?
回到最小值,以下代码的工作原理大致类似于您描述的?
Vector2 pixelpos = new Vector2(0, 1);
float rotation = (float)(Math.Atan2(pixelpos.Y, pixelpos.X) / (2 * Math.PI));
结果为0.25或90度
最好的计算方法是使用点积:
Vector2 pixelposWorld = Vector2.Normalize(pixelpos - center);
float dot = Vector2.Dot(Vector2.UnitX, pixelposWorld);
float rotation = (pixelposWorld.Y >= 0)
? (1f - dot) / 4f
: (dot + 3f) / 4f;
只是说,它平均快了120%(我运行了测试)。
我想你忘记在360中使用float了,应该是360f