Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 正弦波中的运动精灵_C_Math_Trigonometry - Fatal编程技术网

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)