最近在修改程式遇到一點問題,想請教各位小弟邏輯是否有錯,以下是原始程式碼,其中vec[]為float格式,oneQFormat為1左移7 bit
trackerOpFinal[tk].x = (int16_t) (obj->trackerState[ik].vec[iX]*oneQFormat); //X坐標
trackerOpFinal[tk].y = (int16_t) (obj->trackerState[ik].vec[iY]*oneQFormat);//Y坐標
trackerOpFinal[tk].xd = (int16_t) (obj->trackerState[ik].vec[iXd]*oneQFormat);//X速度向量
trackerOpFinal[tk].yd = (int16_t) (obj->trackerState[ik].vec[iYd]*oneQFormat);//Y速度向量
trackerOpFinal[tk].xSize = obj->trackerState[ik].xSize;//X尺寸
trackerOpFinal[tk].ySize = obj->trackerState[ik].ySize;//Y尺寸
我想將以上程式修改為Y速度向量vec[iYd]在-1在-42之間才執行,因此加了一個if判斷式如下段程式碼,不過我看結果輸出好像不如我所預期,是否我哪裡的邏輯有錯?
if( 0xEC00 < (int16_t) (obj->trackerState[ik].vec[iYd]*oneQFormat) < 0xFF00)
{
trackerOpFinal[tk].x = (int16_t) (obj->trackerState[ik].vec[iX]*oneQFormat);
trackerOpFinal[tk].y = (int16_t) (obj->trackerState[ik].vec[iY]*oneQFormat);
trackerOpFinal[tk].xd = (int16_t) (obj->trackerState[ik].vec[iXd]*oneQFormat);
trackerOpFinal[tk].yd = (int16_t) (obj->trackerState[ik].vec[iYd]*oneQFormat);
trackerOpFinal[tk].xSize = obj->trackerState[ik].xSize;
trackerOpFinal[tk].ySize = obj->trackerState[ik].ySize;
tk++;
}
if( 0xEC00 < (int16_t) (obj->trackerState[ik].vec[iYd]*oneQFormat) < 0xFF00)
{
改成
if ((0xEC00<(int16_t)(obj->trackerState[ik].vec[iYd]*oneQFormat))&&((int16_t)(obj->trackerState[ik].vec[iYd]*oneQFormat)<0xFF00))
{
試試看
測試如下