问题描述
我正在尝试将 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);
}
解决方法
正如你所说,你可以使用正弦来做到这一点。
正弦值从 -1
到 1
。
因此,如果您想在位置 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]
中的时间间隔