C 正弦波中的运动精灵
有人能给我一个如何让我的敌人以正弦波移动的想法或数学公式吗 尝试了类似的方法,但他们只是同时移动,所以他们只是创造了一条直线,敌人左右移动C 正弦波中的运动精灵,c,math,trigonometry,C,Math,Trigonometry,有人能给我一个如何让我的敌人以正弦波移动的想法或数学公式吗 尝试了类似的方法,但他们只是同时移动,所以他们只是创造了一条直线,敌人左右移动 for(int i = 0; i < 5; i++){ float y = sinf( 100+delta_time*0.06f) * 75; float x = game->enemy[i].base_x + y; game->enemy[i].x = x ; game->enemy[i].y += 1;
for(int i = 0; i < 5; i++){
float y = sinf( 100+delta_time*0.06f) * 75;
float x = game->enemy[i].base_x + y;
game->enemy[i].x = x ;
game->enemy[i].y += 1;
SDL_Rect rect = { game->enemy[i].x , game->enemy[i].y ,game->enemy[i].w, game->enemy[i].h};
SDL_RenderCopy(game->renderer , game->enemy[i].sprite , NULL , &rect);
}
for(int i=0;i<5;i++){
浮动y=sinf(100+增量时间*0.06f)*75;
浮动x=游戏->敌人[i]。基地x+y;
游戏->敌人[i].x=x;
游戏->敌人[i],y+=1;
SDL_Rect Rect={game->敌方[i].x,game->敌方[i].y,game->敌方[i].w,game->敌方[i].h};
SDL_渲染复制(游戏->渲染器,游戏->敌人[i]。精灵,空,和矩形);
}
让v=(vux,vuy)
成为敌人的总方向。设o
为向量o=(-v|y/|v|y,v|x/|v|y)
其中|v|124; y=sqrt(v|x.v|x+v|y.v|y)
是v
的范数。向量o
垂直于v
。在那个方向需要正弦运动。因此,位置p(t)=(x(t),y(t))
被定义为:
x(t)=v_x.t-A.v_y/||v||.sin(w.t)
y(t)=v_y.t+A.v_x/||v||.sin(w.t)
其中,A
是骨化的幅度,w
是骨化的脉动。相应的频率是f=w/(2pi)
。然后,波长lambda=|v | | |/f
对应于骨化的长度
如果敌人正在x方向移动(v_y=0
),则:
骨化的长度是
lambda=2pi.v_x/w
不太清楚您的确切意图,但是如果您希望所有精灵在同一个正弦波上移动,正弦参数不应该依赖于时间,这对所有精灵都是一样的,而是依赖于精灵的x位置。我正在尝试实现类似的目标
x(t)=v_x.t
y(t)=A.sin(w.t)