如何在 C++ 中创建 2D 左右移动?

问题描述

我正在尝试将 AI 宇宙飞船左右移动。我想使用罪可以解决这个问题,但我正在挣扎。到目前为止,这就是我所拥有的。这只是将飞船永远向右移动,因为它在更新函数中被调用,该函数在每一帧都被调用。我只是想让飞船向右移动一定的量,然后向左做同样的事情,然后永远重复。谢谢

function getorganizer() {
  const calendarId = "YOUR_CALENDAR_ID";
  const optionalArgs = {
    "timeMin": "2021-05-17T00:00:00-02:00",// Change accordingly,min end time to filter
    "timeMax": "2021-05-19T00:00:00-02:00" // Change accordingly,max start time to filter
  };
  const events = Calendar.Events.list(calendarId,optionalArgs)["items"];
  const event = events[0];
  const organizer = event["organizer"];
  console.log(organizer);
  const organizerEmailAddress = organizer["email"];
  console.log(organizerEmailAddress);
}

解决方法

正如你所说,你可以使用正弦来做到这一点。

正弦值从 -11

因此,如果您想在位置 x₁x₂ 之间移动您的飞船,您必须对其进行缩放和平移:

x = (x₁+x₂)/2 + (x₂-x₁)/2 *sin(ωt)

第一项将正弦的中点移动到两个值之间的中点。

第二项缩放正弦的幅度,因此它正好达到 x₁x₂

ω 是角频率,用于衡量物体移动的快慢。

t 是当前时间(自开始以来累计)。

,

如果您的 m_velocity 二维向量是您的对象移动(转动)的方向并且您想要侧步,那么您只需将向量旋转 90 度即可。在 2D 中它非常简单:

side1.x=+m_velocity.y;
side1.y=-m_velocity.x;
side2.x=-m_velocity.y;
side2.y=+m_velocity.x;

现在您有 2 个指向左侧和右侧的向量(这取决于您的坐标系),因此只需缩放它以匹配您的侧向速度。

另一种选择是根据您的速度获取角度并使用 sin,cos:

ang = atan2(m_velocity.y,m_velocity.x) +/- (M_PI*0.5);
side.x=side_speed*cos(ang);
side.y=side_speed*sin(ang);

然而,这不太准确,而且速度要慢得多。它是哪一边取决于 +/- 另外我假设你的角度是弧度。如果以度为单位将 (M_PI*0.5) 改为 90.0

但是,您使用的是没有加速的 Newton d'Alembert 积分。将控制内容(推进器)应用于加速而不是速度更现实......并且已经存储了转角 ang 或以变换矩阵或基向量的形式进行渲染。

有关更多信息,请参阅:

[Edit1] 所以你想要没有向前运动的锯齿形运动

试试这个:

m_velocity = Vector2D(200*sin(2.0*M_PI*f*t),0);

其中 f[Hz] 中的运动频率,t[sec] 中经过的时间

为了更容易出现舍入错误,请使用

m_velocity = Vector2D(200*sin(fmod(2.0*M_PI*f*t,2.0*M_PI)),0);

然而,在 t 饱和到无法递增的程度后,即使这样也不行......

当与时间放在一起时:

static float ang=0.0;
m_velocity = Vector2D(200*sin(ang),0);
ang=fmod(ang+(2.0*M_PI*f*dt),2.0*M_PI);

其中 dt 是您的计时器或用于调用此代码的任何事件的 [sec] 中的时间间隔