C# 物理数据类型
我目前正在设计一个包含一些物理知识的程序(没什么特别的,几个球撞在一起) 用c#表示位置(没有离散跳跃的感觉)最准确的数据类型是什么 还有,在t和t+1之间我能得到的最小时间是多少?一滴答C# 物理数据类型,c#,types,physics,C#,Types,Physics,我目前正在设计一个包含一些物理知识的程序(没什么特别的,几个球撞在一起) 用c#表示位置(没有离散跳跃的感觉)最准确的数据类型是什么 还有,在t和t+1之间我能得到的最小时间是多少?一滴答 编辑:澄清:C#中的最小时间单位是什么[TimeSpan]。勾选?我不确定我是否理解你的最后一个问题,请你澄清一下好吗 编辑: 我可能仍然不明白,但是你可以使用任何你想要的类型(例如,double)来表示时间(如果你真正想要的是表示物理问题的时间离散化,在这种情况下,勾号是不相关的)。对于大多数物理问题,双倍
编辑:澄清:C#中的最小时间单位是什么<代码>[TimeSpan]。勾选?我不确定我是否理解你的最后一个问题,请你澄清一下好吗 编辑: 我可能仍然不明白,但是你可以使用任何你想要的类型(例如,double)来表示时间(如果你真正想要的是表示物理问题的时间离散化,在这种情况下,勾号是不相关的)。对于大多数物理问题,双倍就足够了
刻度是使用机器测量时间时可以达到的最佳精度。在.Net中,十进制将是可用于位置的最精确数据类型。我会为这个职位写一个课程:
public class Position
{
decimal x;
decimal y;
decimal z;
}
至于时间,你的处理器不能给你任何小于一个刻度的东西
听起来是个有趣的项目!祝你好运 我认为您应该能够毫无问题地使用十进制数据类型。它具有最精确的精度。但是,双精度数据类型应该很好
是的,一个刻度是我所知道的最小值(使用System.Diagnostics.Stopwatch类)。对于模拟,最好使用十进制/双精度(与位置相同类型)进行无量纲时间,然后将其从/转换为输入/输出上有意义的内容。否则,当你移动物体时,你将执行大量的投射操作。这样也可以获得任意精度,因为您可以选择任意大/小的时间刻度。十进制数据类型,尽管根据您的操作,精度可能不是最佳选择。通常,Direct3D和GPU使用32位浮点和3(总共96位)的向量来表示x、y、z中的位置 这通常会提供足够的精度,除非你需要在同一个“世界”中混合大尺度(行星)和微观层次(篮球) 不使用小数的原因可能是大小(大4倍)、速度(慢几个数量级)以及没有可用的三角函数(AFAIK)
在Windows上,API函数将为您提供最高分辨率的时钟和计数器的频率。我相信其他评论中描述的秒表将其封装在.net类中。我将使用向量数据类型。就像在物理学中一样,当你想模拟一个物体的运动时,你可以使用向量。使用或框架或滚动来表示位置。Vector2表示二维,Vector3表示三维
结构或类将是计算时间变化的最佳选项。如果必须推荐的话,我会使用秒表。嘿,Juan,我建议您使用其他人建议的Vector3类,因为它易于使用,最重要的是,它支持您需要的所有操作(如加法、乘法、矩阵乘法等),而无需自己实现。 如果您对如何继续有任何疑问-继承它,在以后的阶段,您可以随时更改内部实现,或断开与vector3的连接 此外,不要使用比浮点精度低的任何东西——现在所有处理器的运行速度都足以比整数更精确(除非它是为移动设备而设计的,但即使是在那里……)
如果使用小于浮点,则会很快失去精度,并最终导致跳跃式的旋转和平移,尤其是如果您计划使用多个矩阵/四元数乘法。除非您从事火箭科学,否则十进制是一种过分的方法。虽然它可能会给你更精确的位置,但它不一定会给你更精确的(例如)速度,因为它是一个定点数据类型,因此被限制在比浮点或双精度更小的范围内
使用浮点数,但保持门打开,以便向上移动到双倍,以防精度出现问题。+1:用3个浮点数构建的向量在D3D中非常标准。除非你需要更高的准确度,否则我不会使用小数,但如果这只是一个游戏,我不会担心。-1:小数很少用于任何3D游戏计算,它们太慢了。使用一个由3个浮点数构建的向量类,您就可以全部设置了。+1:对于实数类型,十进制是最精确的,这就是要求的。