Maya表达式控制动力学动画之小鸡抢食

http://tech.ddvip.com   2007年08月18日    社区交流

内容摘要:Maya表达式控制动力学动画

  5.下面进行核心的算法说明,在追逐中,不管小鸡当时在什么方位,他们的目标都为有虫的小鸡,另外小鸡不能相互穿过,所以在后面的小鸡若要跃过前面的小鸡,需要改变奔跑的方向,找空当穿插追逐。

  for($j=1;$j<41;$j=$j+1)
  {$dz[$j]=$tz[$j]-$tz[0];
  $sign[$k]=sign($vz[$k])*sign($tz[$k]-$tz[$j]);
  $dx[$j]=abs($tx[$j]-$tx[$k]);
  if((abs($dz[$k]-$dz[$j])<5)
  &&($sign[$k]>0)&&($dx[$j]<=5))
  {
  $lz[$k]=abs($dz[$k]-$dz[$j]);
  $lz[$k]=min($lz[$k],$zz[$k]);
  $zz[$k]=$lz[$k];
  $code[$k]=$j;
  $n[$k]=$n[$k]+1;
  }
  }

  这段程序是避免小鸡们相互穿插的,通过判断各小鸡相对其它小鸡的位置及距离,决定其加速或减速或改道。在这个练习中,我定义的小鸡个体半径为1个单位,所以我定义小鸡前面若5个单位内有其他小鸡,它会考虑改变速度或方向。

  if((abs($dz[$k]-$dz[$j])<5)
  &&($sign[$k]>0)&&($dx[$j]<=5))

  其中$lz[$k]是用来表示小鸡前其他小鸡在z轴方向相对其最近的距离。$n[$k]表示在同一帧中,某小鸡前面(z轴方向)其他小鸡距其距离小于5单位的个数。以上是用按照序号逐个小鸡遍历方式比较得出结果,因此在小鸡数量较多或小鸡速度较快时,会有较大的误差,有朋友知道根本解决问题的方法吗?

  if($n[$k]==0)
  $aFz[$k]=15+0*abs($dz[$k]/3);
  else
  $aFz[$k]=15+0*abs($dz[$k]/3)-$k1*(7-$lz[$k]);
  if($tz[$k]<$tz[0])
  $aFz[$k]=-$aFz[$k];
  if(($lz[$k]<3)&&($n[$k]>0))
  $afz[$k]=8*$k2*$vz[$k]+10*sign($vz[$k]);
  else
  $afz[$k]=$k2*$vz[$k];
  $az[$k]=$aFz[$k]-$afz[$k];
  if(($lz[$k]<2)&&($n[$k]>0))
  $vz[$k]=$vz[$code[$k]];
  else
  $vz[$k]=$vz[$k]+$az[$k]*$t; $tz[$k]=-$vz[$k]*$t-0.5*$az[$k]*$t*$t+$tz[$k];

  这段是定义各小鸡在z轴方向奔跑加速度和速度及位置的程序。其中$aFz[$k]表示其他小鸡相对有虫小鸡的主动加速度,$afz[$k]表示其他小鸡在奔跑中因速度和前面障碍而产生的反向阻碍其追逐的加速度。

责编:豆豆技术应用

正在加载评论...