亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cmatrix.c

?? 攝影測量專業。實現單像后方交會以及立體像對的前方交會。以文件形式讀取控制點和像點坐標。
?? C
?? 第 1 頁 / 共 5 頁
字號:
      MTX_ERROR_MSG( "malloc returned NULL." );
      return FALSE;
    }
  }
  else
  {
    cptr = (stComplex**)malloc( ncols*sizeof(stComplex*) );
    if( !cptr )
    {
      MTX_ERROR_MSG( "malloc returned NULL." );
      return FALSE;
    }
  }

  for( j = 0; j < ncols; j++ )
  {
    if( j < dst->ncols )
    {
      // keep the original data
      if( dst->isReal )
        dptr[j] = dst->data[j];
      else
        cptr[j] = dst->cplx[j];
    }
    else
    {
      // copy the new data
      if( dst->isReal )
        dptr[j] = (double*)malloc( dst->nrows*sizeof(double) );
      else
        cptr[j] = (stComplex*)malloc( dst->nrows*sizeof(stComplex) );
      if( dst->isReal )
      {
        if( !(dptr[j]) )
        {
          // this is most likely to occur if allocating more memory than available
          for( m = 0; m < j; m++ )
          {
            free( dptr[m] );
          }

          MTX_ERROR_MSG( "malloc returned NULL." );
          free( dptr );
          return FALSE;
        }
      }
      else
      {
        if( !(cptr[j]) )
        {
          // this is most likely to occur if allocating more memory than available
          for( m = 0; m < j; m++ )
          {
            free( cptr[m] );
          }
          free( cptr );
          MTX_ERROR_MSG( "malloc returned NULL." );
          return FALSE;
        }
      }
      // copy the src column vector
      for( i = 0; i < dst->nrows; i++ )
      {
        if( dst->isReal )
        {
          dptr[j][i] = src->data[j-dst->ncols][i];
        }
        else
        {
          if( src->isReal )
          {
            cptr[j][i].re = src->data[j-dst->ncols][i];
            cptr[j][i].im = 0;
          }
          else
          {
            cptr[j][i] = src->cplx[j-dst->ncols][i];
          }
        }
      }
    }
  }

  // free the old column array, and copy the new
  if( dst->isReal )
  {
    free( dst->data );
    dst->data = dptr;
  }
  else
  {
    free( dst->cplx );
    dst->cplx = cptr;
  }
  dst->ncols = ncols;

  return TRUE;
}



// A becomes A|0|0|0|.. etc
BOOL MTX_AddZeroValuedColumns( MTX *dst, const unsigned nr_new_cols )
{
  unsigned i = 0;
  unsigned j = 0;
  unsigned ncols;
  unsigned m = 0;
  double **dptr = NULL;
  stComplex **cptr = NULL;

  if( MTX_isNull( dst ) )
  {
    MTX_ERROR_MSG( "NULL Matrix" );
    return FALSE;
  }

  ncols = dst->ncols + nr_new_cols;

  // allocate a new array of column vectors
  if( dst->isReal )
  {
    dptr = (double**)malloc( ncols*sizeof(double*) );
    if( !dptr )
    {
      MTX_ERROR_MSG( "malloc returned NULL." );
      return FALSE;
    }
  }
  else
  {
    cptr = (stComplex**)malloc( ncols*sizeof(stComplex*) );
    if( !cptr )
    {
      MTX_ERROR_MSG( "malloc returned NULL." );
      return FALSE;
    }
  }

  for( j = 0; j < ncols; j++ )
  {
    if( j < dst->ncols )
    {
      // keep the original data
      if( dst->isReal )
        dptr[j] = dst->data[j];
      else
        cptr[j] = dst->cplx[j];
    }
    else
    {
      // copy the new data
      if( dst->isReal )
      {
        dptr[j] = (double*)calloc( dst->nrows, sizeof(double) );
      }
      else
      {
        cptr[j] = (stComplex*)calloc( dst->nrows, sizeof(stComplex) );
      }
      if( dst->isReal )
      {
        if( !(dptr[j]) )
        {
          // this is most likely to occur if allocating more memory than available
          for( m = 0; m < j; m++ )
          {
            free( dptr[m] );
          }
          free( dptr );

          MTX_ERROR_MSG( "calloc returned NULL." );
          return FALSE;
        }
      }
      else
      {
        if( !(cptr[j]) )
        {
          // this is most likely to occur if allocating more memory than available
          for( m = 0; m < j; m++ )
          {
            free( cptr[m] );
          }
          free( cptr );

          MTX_ERROR_MSG( "calloc returned NULL." );
          return FALSE;
        }
      }

    }
  }

  // free the old column array, and copy the new
  if( dst->isReal )
  {
    free( dst->data );
    dst->data = dptr;
  }
  else
  {
    free( dst->cplx );
    dst->cplx = cptr;
  }
  dst->ncols = ncols;

  return TRUE;
}

BOOL MTX_Redim( MTX *dst, const unsigned nrows, const unsigned ncols )
{
  unsigned i = 0;
  unsigned j = 0;
  unsigned nc;
  unsigned nr;
  MTX copy;
  double **dptr = NULL;
  stComplex **cptr = NULL;
  const BOOL isReal = dst->isReal;

  MTX_Init( &copy );

  if( !dst )
  {
    MTX_ERROR_MSG( "dst is a NULL pointer." );
    return FALSE;
  }

  if( nrows == 0 || ncols == 0 )
  {
    MTX_ERROR_MSG( "if( nrows == 0 || ncols == 0 )" );
    return FALSE;
  }

  // special case - calling Redim with a null matrix
  if( dst->ncols == 0 && dst->nrows == 0 )
    return MTX_Calloc( dst, nrows, ncols, dst->isReal );


  // check same size
  if( dst->nrows == nrows && dst->ncols == ncols )
    return TRUE;

  // special cases, adding or removing columns
  if( dst->nrows == nrows )
  {
    if( ncols < dst->ncols )
    {
      if( MTX_RemoveColumnsAfterIndex( dst, ncols-1 ) == FALSE )
      {
        MTX_ERROR_MSG( "MTX_RemoveColumnsAfterIndex returned FALSE." );
        return FALSE;
      }

      return TRUE;
    }
    else
    {
      // Add the extra columns
      if( !MTX_AddZeroValuedColumns( dst, ncols-dst->ncols ) )
      {
        MTX_ERROR_MSG( "MTX_AddZeroValuedColumns returned FALSE." );
        return FALSE;
      }
      return TRUE;
    }
  }

  // make a copy of the previous data
  if( !MTX_Malloc( &copy, dst->nrows, dst->ncols, isReal ) )
  {
    MTX_ERROR_MSG( "MTX_Malloc returned FALSE." );
    return FALSE;
  }
  if( !MTX_Copy( dst, &copy ) )
  {
    MTX_ERROR_MSG( "MTX_Copy returned FALSE." );
    MTX_Free( &copy );
    return FALSE;
  }

  // must reallocate the matrix
  MTX_Free( dst );

  if( !MTX_Calloc( dst, nrows, ncols, isReal ) )
  {
    MTX_ERROR_MSG( "MTX_Calloc returned FALSE." );
    MTX_Free( &copy );
    return FALSE;
  }

  // Copy the previous data.
  if( dst->ncols < copy.ncols )
    nc = dst->ncols;
  else
    nc = copy.ncols;

  if( dst->nrows < copy.nrows )
    nr = dst->nrows;
  else
    nr = copy.nrows;

  if( isReal )
  {
    for( j = 0; j < nc; j++ )
    {
      memcpy( dst->data[j], copy.data[j], sizeof(double)*nr );
    }
  }
  else
  {
    for( j = 0; j < nc; j++ )
    {
      memcpy( dst->cplx[j], copy.cplx[j], sizeof(stComplex)*nr );
    }
  }
  MTX_Free( &copy );
  return TRUE;
}

BOOL MTX_Resize( MTX *dst, const unsigned nrows, const unsigned ncols, const BOOL isReal )
{
  if( !dst )
  {
    MTX_ERROR_MSG( "dst is a NULL pointer." );
    return FALSE;
  }

  if( nrows == 0 || ncols == 0 )
  {
    MTX_ERROR_MSG( "if( nrows == 0 || ncols == 0 )" );
    return FALSE;
  }

  // MTX_Calloc is smart. It only re-allocates memory if it needs to
  // and always sets the data to zero.
  if( !MTX_Calloc( dst, nrows, ncols, isReal ) )
  {
    MTX_ERROR_MSG( "MTX_Calloc returned FALSE." );
    return FALSE;
  }

  return TRUE;
}

BOOL MTX_Copy( const MTX *src, MTX *dst )
{
  unsigned i = 0;
  unsigned j = 0;

  if( MTX_isNull( src ) )
  {
    MTX_ERROR_MSG( "NULL Matrix" );
    return FALSE;
  }
  if( !dst )
  {
    MTX_ERROR_MSG( "dst is a NULL pointer." );
    return FALSE;
  }

  // both must be real or both must be complex
  if( dst->isReal != src->isReal )
  {
    if( !MTX_Resize( dst, src->nrows, src->ncols, src->isReal ) )
    {
      MTX_ERROR_MSG( "MTX_Resize returned FALSE." );
      return FALSE;
    }
  }

  if( !MTX_isSameSize( src, dst ) )
  {
    if( !MTX_Resize( dst, src->nrows, src->ncols, src->isReal ) )
    {
      MTX_ERROR_MSG( "MTX_Resize returned FALSE." );
      return FALSE;
    }
  }
  

  if( src->isReal )
  {  
    for( j = 0; j < dst->ncols; j++ )
    {
      memcpy( dst->data[j], src->data[j], sizeof(double)*(dst->nrows) );
    }
  }
  else
  {
    for( j = 0; j < dst->ncols; j++ )
    {
      memcpy( dst->cplx[j], src->cplx[j], sizeof(stComplex)*(dst->nrows) );
    }
  }
  
  return TRUE;
}

BOOL MTX_CopyIntoColumnWiseVector( const MTX *src, MTX *dst )
{
  unsigned i = 0;
  unsigned j = 0;

  if( MTX_isNull( src ) )
  {
    MTX_ERROR_MSG( "NULL Matrix" );
    return FALSE;
  }
  if( !dst )
  {
    MTX_ERROR_MSG( "dst is a NULL pointer." );
    return FALSE;
  }

  // both must be real or both must be complex
  if( dst->isReal != src->isReal )
  {
    if( !MTX_Resize( dst, src->nrows*src->ncols, 1, src->isReal ) )
    {
      MTX_ERROR_MSG( "MTX_Resize returned FALSE." );
      return FALSE;
    }
  }

  if( dst->nrows != src->nrows*src->ncols )
  {
    if( !MTX_Resize( dst, src->nrows*src->ncols, 1, src->isReal ) )
    {
      MTX_ERROR_MSG( "MTX_Resize returned FALSE." );
      return FALSE;
    }
  }

  if( src->isReal )
  {
    for( j = 0; j < src->ncols; j++ )
    {
      memcpy( &(dst->data[0][j*src->nrows]), src->data[j], sizeof(double)*src->nrows );
    }
  }
  else
  {
    for( j = 0; j < src->ncols; j++ )
    {
      memcpy( &(dst->cplx[0][j*src->nrows]), src->cplx[j], sizeof(stComplex)*src->nrows );
    }
  }

  return TRUE;
}


BOOL MTX_SetFromStaticMatrix( MTX *dst, const double mat[], const unsigned nrows, const unsigned ncols )
{
  unsigned i = 0;
  unsigned j = 0;

  if( !dst )
  {
    MTX_ERROR_MSG( "dst is a NULL pointer." );
    return FALSE;
  }

  if( !mat )
  {
    MTX_ERROR_MSG( "mat is a NULL pointer." );
    return FALSE;
  }

  if( dst->nrows != nrows || dst->ncols != ncols )
  {
    if( !MTX_Resize( dst, nrows, ncols, TRUE ) )
    {
      MTX_ERROR_MSG( "MTX_Resize returned FALSE." );
      return FALSE;
    }
  }

  for( j = 0; j < ncols; j++ )
    for( i = 0; i < nrows; i++ )
      dst->data[j][i] = mat[i*ncols + j];

  return TRUE;
}

BOOL MTX_CopyColumn( const MTX *src, const unsigned col, MTX *dst )
{
  unsigned i = 0;

  if( MTX_isNull( src ) )
  {
    MTX_ERROR_MSG( "NULL Matrix" );
    return FALSE;
  }
  if( !dst )
  {
    MTX_ERROR_MSG( "dst is a NULL pointer." );
    return FALSE;
  }
  if( col >= src->ncols )
  {
    MTX_ERROR_MSG( "if( col >= src->ncols )" );
    return FALSE;
  }

  if( src->isReal != dst->isReal )
  {
    if( !MTX_Malloc( dst, src->nrows, 1, src->isReal ) )
    {
      MTX_ERROR_MSG( "MTX_Resize returned FALSE." );
      return FALSE;
    }
  }
  else if( dst->nrows != src->nrows || dst->ncols != 1 )
  {
    if( !MTX_Malloc( dst, src->nrows, 1, src->isReal ) )
    {
      MTX_ERROR_MSG( "MTX_Resize returned FALSE." );
      return FALSE;
    }
  }

  if( src->isReal )
  {
    memcpy( dst->data[0], src->data[col], sizeof(double)*(dst->nrows) );
  }
  else
  {
    memcpy( dst->cplx[0], src->cplx[col], sizeof(stComplex)*(dst->nrows) );
  }

  return TRUE;
}

BOOL MTX_CopyRow( const MTX *src, const unsigned row, MTX *dst )
{
  unsigned i = 0;

  if( MTX_isNull( src ) )
  {
    MTX_ERROR_MSG( "NULL Matrix" );
    return FALSE;
  }
  if( !dst )
  {
    MTX_ERROR_MSG( "dst is a NULL pointer." );
    return FALSE;
  }
  if( row >= src->nrows )
  {
    MTX_ERROR_MSG( "if( row >= src->nrows )" );
    return FALSE;
  }

  if( dst->nrows != 1 || dst->ncols != src->ncols )
  {
    if( !MTX_Resize( dst, 1, src->ncols, src->isReal ) )
    {
      MTX_ERROR_MSG( "MTX_Resize returned FALSE." );
      return FALSE;
    }
  }

  for( i = 0; i < dst->ncols; i++ )
  {
    if( src->isReal )
      dst->data[i][0] = src->data[i][row];
    else
      dst->cplx[i][0] = src->cplx[i][row];
  }

  return TRUE;
}

BOOL MTX_CopyRowIntoAColumnMatrix( const MTX *src, const unsigned row, MTX *dst )
{
  unsigned i = 0;

  if( MTX_isNull( src ) )
  {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久777精品电影网影网 | 色婷婷国产精品| 国产精品国产三级国产有无不卡| 国产精品一区不卡| 亚洲欧洲精品一区二区三区不卡 | 亚洲人被黑人高潮完整版| 99久久99久久精品免费观看| 亚洲精品视频在线| 69堂成人精品免费视频| 男女男精品视频| 国产欧美日韩在线视频| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲精品老司机| 欧美日韩和欧美的一区二区| 秋霞电影网一区二区| 久久影音资源网| 色狠狠色狠狠综合| 久久成人18免费观看| 欧美国产一区二区在线观看| 在线观看亚洲专区| 久久精品理论片| 亚洲欧美日韩国产综合| 8x8x8国产精品| 乱中年女人伦av一区二区| 久久九九全国免费| 欧美影院一区二区| 国产一区二区三区观看| 亚洲一线二线三线久久久| 日韩午夜激情免费电影| 99久久99久久久精品齐齐| 首页国产欧美日韩丝袜| 国产精品免费人成网站| 91精品国产福利在线观看| 成人免费黄色大片| 日韩高清一区二区| 亚洲三级久久久| 精品国产乱子伦一区| 欧美亚男人的天堂| 国内精品国产成人| 亚洲va在线va天堂| 亚洲三级电影全部在线观看高清| 欧美成va人片在线观看| 在线亚洲免费视频| 大陆成人av片| 国产原创一区二区| 午夜欧美一区二区三区在线播放| 日本一区二区免费在线观看视频| 51精品久久久久久久蜜臀| 91年精品国产| 丰满放荡岳乱妇91ww| 久久精品国产精品亚洲红杏| 亚洲乱码一区二区三区在线观看| 欧美精品一区二区三区在线播放| 91九色02白丝porn| 成人黄色片在线观看| 久久精品久久久精品美女| 亚洲高清久久久| 国产精品国产三级国产普通话三级 | 日本在线观看不卡视频| 亚洲精品菠萝久久久久久久| 国产精品的网站| 欧美国产视频在线| 久久久噜噜噜久久中文字幕色伊伊| 欧美日韩亚洲另类| 色天天综合久久久久综合片| 成人毛片视频在线观看| 粉嫩aⅴ一区二区三区四区| 韩国成人精品a∨在线观看| 青青草成人在线观看| 日本亚洲免费观看| 天天色综合成人网| 婷婷开心久久网| 亚洲成人在线免费| 婷婷夜色潮精品综合在线| 亚洲成人久久影院| 亚洲成人免费视频| 亚洲国产综合在线| 亚洲午夜一二三区视频| 亚洲影视在线观看| 亚洲精品视频在线看| 亚洲国产欧美在线人成| 亚洲图片一区二区| 亚洲成人免费视频| 亚洲电影一区二区| 婷婷久久综合九色国产成人| 欧美a级理论片| 日韩黄色小视频| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲成av人在线观看| 亚洲一区二区欧美| 午夜亚洲福利老司机| 水野朝阳av一区二区三区| 蜜臀av一级做a爰片久久| 欧美96一区二区免费视频| 蜜臀av性久久久久av蜜臀妖精| 亚洲电影欧美电影有声小说| 三级亚洲高清视频| 精品午夜久久福利影院| 精品一区二区三区视频| 丰满放荡岳乱妇91ww| 91老师国产黑色丝袜在线| 在线观看亚洲一区| 日韩午夜三级在线| 国产日韩欧美麻豆| 亚洲精品国产a| 午夜伦理一区二区| 国产一区二区三区高清播放| 懂色av中文字幕一区二区三区 | 国产精品久久影院| 亚洲欧洲精品天堂一级| 亚洲午夜精品网| 狠狠色狠狠色综合系列| 91影视在线播放| 777奇米四色成人影色区| 国产女主播在线一区二区| 亚洲男同性视频| 日韩国产成人精品| 成人av片在线观看| 8x福利精品第一导航| 日本一区二区三区在线不卡| 亚洲男人的天堂一区二区| 日韩电影一区二区三区四区| 成人免费av资源| 欧美一区二区三区影视| 国产精品国产三级国产aⅴ无密码| 亚洲国产精品人人做人人爽| 国产精品影视在线| 91精品午夜视频| 国产精品精品国产色婷婷| 老司机精品视频在线| 色中色一区二区| 国产亚洲欧洲一区高清在线观看| 亚洲最快最全在线视频| 国产成人午夜精品影院观看视频| 欧美理论片在线| 国产精品福利一区二区三区| 麻豆91在线观看| 欧美性感一区二区三区| 国产精品久久久久一区| 理论电影国产精品| 欧美浪妇xxxx高跟鞋交| 亚洲欧美日韩在线播放| 高清国产一区二区| www亚洲一区| 日韩av一区二| 欧美网站大全在线观看| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 一个色在线综合| 国产99一区视频免费| 日韩精品一区二区三区中文不卡| 亚洲综合一二区| 日韩欧美国产电影| 亚洲电影中文字幕在线观看| 91首页免费视频| 国产日韩v精品一区二区| 狠狠色丁香婷婷综合| 日韩精品影音先锋| 奇米精品一区二区三区在线观看 | 成人午夜又粗又硬又大| 精品久久久久香蕉网| 老色鬼精品视频在线观看播放| 欧美色图一区二区三区| 亚洲精品国产品国语在线app| 99久久精品国产观看| 国产精品亲子乱子伦xxxx裸| 欧美人伦禁忌dvd放荡欲情| 亚洲欧美日韩人成在线播放| 成人av一区二区三区| 自拍偷在线精品自拍偷无码专区| 盗摄精品av一区二区三区| 国产三级精品视频| 成人免费毛片片v| 亚洲欧洲国产日韩| 日本精品视频一区二区三区| 亚洲一区在线观看网站| 欧美性感一区二区三区| 日韩成人一级片| 欧美精品一区二区三区蜜桃视频 | 亚洲欧美中日韩| 91免费国产在线| 亚洲资源在线观看| 欧美浪妇xxxx高跟鞋交| 久久99精品久久久久久国产越南| 欧美mv日韩mv亚洲| 国产乱码字幕精品高清av | 一区二区在线观看视频| 欧亚洲嫩模精品一区三区| 五月婷婷综合激情| 日韩女优av电影| 懂色av中文一区二区三区| 亚洲精品视频在线看| 91麻豆精品国产综合久久久久久| 捆绑调教美女网站视频一区| 久久综合久久鬼色| 97久久超碰精品国产| 日韩电影在线观看一区| 国产女人水真多18毛片18精品视频| 99久久婷婷国产综合精品电影| 亚洲韩国精品一区| www国产成人|