iT邦幫忙

2

資料型態問題(新手)

最近在修改程式遇到一點問題,想請教各位小弟邏輯是否有錯,以下是原始程式碼,其中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++;
               }

1 個回答

3
海綿寶寶
iT邦大神 1 級 ‧ 2021-10-27 16:17:11
最佳解答
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)) 
{

試試看

測試如下
https://ithelp.ithome.com.tw/upload/images/20211027/20001787x18NOY7UvN.png

我要發表回答

立即登入回答