【问题标题】:most accurate data type for positioning最准确的定位数据类型
【发布时间】:2015-08-07 10:01:05
【问题描述】:

这是一件非常烦人的事情。在 XNA/Monogame 中,SpriteBatch.Draw 使用 Vector2 作为位置,或者使用 Rectangle 作为位置。 Vector2 接受浮点值,而 Rectangles 只接受整数。

我需要使用浮点数/双精度数,因为它们支持图像在屏幕上的平滑移动。但是,在执行需要余弦和正弦、截断或任何数学转换函数的操作时,我注意到了特定的数学错误。

以这个公式为例:

for(int i = 0; i < 8; i++)
{

creategraphic(320+64*cos(360/8*i),240*+64*sin(360/8*i));

}

这应该在半径为 64 的圆上创建 8 个纹理,并且间隔均匀。然而,结果远非如此。我得到的值具有从相同角度产生的对象或更糟的东西。

那么对于定位,在处理复杂的数学计算并仍保持准确性时,最好的处理方法是什么?

【问题讨论】:

  • 您应该首先将360 替换为360.0f
  • 我试过了,但角度仍然是错误的。没有明显变化。 s9.postimg.org/4jyrylmsv/Screenshot_70.png 一张我得到的照片,即使在将 .0f 添加到 360 后也是如此
  • sin/cos 通常采用弧度(不是您的代码中的度数)。不确定您使用的是什么语言/库,所以不知道它是否适用。
  • 啊哇,我完全忘了这样做。我正在从为我们执行此操作的脚本引擎过渡。也许我会创建一个适用于学位的副本。感谢您解决这个问题。我正在使用 C# 顺便说一句

标签: c# math xna monogame


【解决方案1】:

就像 Alexei 所说的,三角函数使用弧度而不是度数。 XNA 有一个帮助类可以完成你需要的转换:

https://msdn.microsoft.com/en-us/library/microsoft.xna.framework.mathhelper.toradians.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 2011-04-26
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    相关资源
    最近更新 更多