【问题标题】:How to do 2d vector movement [closed]如何进行二维矢量运动[关闭]
【发布时间】:2010-03-15 17:13:45
【问题描述】:

我的屏幕对象有一个 var 旋转(以度为单位)。

我该如何解决它,所以当我推动向上箭头时,它会向前移动,而不仅仅是 x++ 和 y++?

【问题讨论】:

  • 我建议你澄清你的问题,因为它根本不清楚你在说什么。
  • 他有一个面向任何方向(以度为单位)的对象,并且他希望将对象朝其面向的方向向前移动。现在他有移动键来加减 x 和 y
  • @pyro 这就是我的想法,但我不确定是否可以编辑他的问题...

标签: c# vector 2d


【解决方案1】:

不是 100% 确定这是你想要的,但我认为你想做:

x += speed * cos(angle);
y += speed * sin(angle);

其中angle 是对象的旋转,xy 是它的坐标。 speed 是对象的速度。

【讨论】:

  • 这是 0 度从 0 度向右(东)开始的位置,逆时针方向移动。
  • 大声笑,我们的帖子/cmets实际上是相互镜像的:P
  • 你给了他代码,却没有解释它为什么起作用。 JasonX 显然是在这里学习,而你为他走捷径并没有帮助。
【解决方案2】:
x += sin(rotation) * speed;
y += cos(rotation) * speed;

但这取决于您的旋转方向。此代码适用于以 0 度向上(向北)旋转,顺时针移动。

【讨论】:

  • 北方的 0 度不是标准的。在数学中,0 度总是向右,逆时针增加。
【解决方案3】:

使用三角函数。

你有移动的角度和长度(这是你的斜边),所以你应该能够使用 sin 或 cos 来计算所需的 x 和 y 移动量。

【讨论】:

    【解决方案4】:

    澄清一下,既然这是 C#,你会想要这样做

    double radians = (Math.PI/180)*angleInDegrees;
    x += speed * Math.Cos(radians);
    y += speed * Math.Sin(radians);
    

    正如其他海报所提到的,这是基于使用三角学将旋转应用于速度矢量(在这种情况下,0 度矢量指向右侧)。

    【讨论】:

      猜你喜欢
      • 2020-08-16
      • 2012-05-11
      • 2019-10-21
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-07
      • 2014-11-14
      相关资源
      最近更新 更多