C# 最精确的定位数据类型

C# 最精确的定位数据类型,c#,math,xna,monogame,C#,Math,Xna,Monogame,这是一件非常烦人的事情。在XNA/Monogame中,SpriteBatch.Draw使用矢量2表示位置,或者使用矩形表示位置。Vector2接受浮点值,而矩形只接受整数 我需要使用浮动/双浮动,因为它们支持图像在屏幕上的平滑移动。但是,我注意到,在执行需要余弦和正弦、截断或任何数学转换函数的操作时,会出现特定的数学错误 以这个公式为例: for(int i = 0; i < 8; i++) { creategraphic(320+64*cos(360/8*i),240*+64*sin(

这是一件非常烦人的事情。在XNA/Monogame中,SpriteBatch.Draw使用矢量2表示位置,或者使用矩形表示位置。Vector2接受浮点值,而矩形只接受整数

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

以这个公式为例:

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

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

}
for(int i=0;i<8;i++)
{
creategraphic(320+64*cos(360/8*i),240*64*sin(360/8*i));
}
这将在半径为64的圆上创建8个纹理,且纹理间距均匀。然而,结果却远非如此。我得到的值包含从相同角度生成的对象,或者更糟糕的值


那么,对于定位,在进行复杂的数学计算时,最好的处理方法是什么,同时保持精度呢?

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


首先,你应该用
360.0f
替换
360
。我试过了,但角度还是不对。没有明显的变化。即使在将.0f添加到360sin/cos之后,我得到的图片通常都是弧度(不像代码中的度数)。不确定你使用的是什么语言/库,所以不知道它是否适用。哇,我完全忘了这么做。我正在从一个为我们做这件事的脚本引擎过渡。也许我会创建一个与度相关的副本。谢谢你解决这个问题。我用的是C#btw