繁體的 間補,也就是我們常說的補間插值,或者線性插值。 //=====================================
 /**//**
等速運動用的間補

@param?start?[in]?起點
@param?end??[in]?終點
@param?all??[in]?起點到終點經過的時間
@param?now??[in]?現在時間

@return?以now為基礎的間補值
*/
//=====================================
float?FlatSpeed(?float?start,?float?end,?long?all,?long?now?)
  {
return?(start?+?((end?-?start)?*?now?/?all));
}

//=============================================
 /**//**
加速運動用的間補

@param?start?[in]?起點
@param?end??[in]?終點
@param?all??[in]?起點到終點經過的時間
@param?now??[in]?現在時間

@return?以now為基礎的間補值
*/
//===========================================
float?AddSpeed(?float?start,?float?end,?long?all,?long?now?)
  {
return?(?(start)+((end)-(start))?*?(((???????????(now)+1)*(now))>>1)?/?((((all)+1)*(all))>>1)?);
}

//=============================================
 /**//**
減速運動用的間補

@param?start?[in]?起點
@param?end??[in]?終點
@param?all??[in]?起點到終點經過的時間
@param?now??[in]?現在時間

@return?以now為基礎的間補值
*/
//============================================
float?SubSpeed(?float?start,?float?end,?long?all,?long?now?)
  {
return?(?(start)+((end)-(start))?*?(((((all)<?<1)-(now)+1)*(now))>>1)?/?((((all)+1)*(all))>>1)?);
}

//==============================================
 /**//**
Bezier用的間補計算

@param?p1?[in]?起點
@param?p2?[in]?中間點
@param?p3?[in]?終點
@param?t?[in]?現在的時間(0?1)

@return??在t方面的值
*/
//============================================
float?Bezier(?float?p1,?float?p2,?float?p3,?float?t?)
  {
return?(?((1-t)*(1-t)*p1)?+?(2*(1-t)*t*p2)?+?(t*t*p3)?);
}

//===========================================
 /**//**
Neville用的間補計算

@param?p1?[in]?起點
@param?p2?[in]?中間點
@param?p3?[in]?終點
@param?t?[in]?現在的時間(0?1)

@return??在t方面的值
*/
//=========================================
float?Neville(?float?p1,?float?p2,?float?p3,?float?t?)
  {
t?*=?2;
p1?=?p2?+?(?p2?-?p1?)?*?(?t?-?1?);
p2?=?p3?+?(?p3?-?p2?)?*?(?t?-?2?);
return?p2?+?(?p2?-?p1?)?*?(?t?-?2?)?*?0.5f;
}
|