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

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

?? matrix.h

?? 實現4自由度scara機械手的點對點運動,用Jacobi實現坐標變換
?? H
?? 第 1 頁 / 共 2 頁
字號:
   return *this;
}

// combined scalar division and assignment operator
MAT_TEMPLATE inline matrixT&
matrixT::operator /= (const T& c) _NO_THROW
{
    if (_m->Refcnt > 1) clone();
    for (size_t i=0; i < _m->Row; i++)
	for (size_t j=0; j < _m->Col; j++)
	    _m->Val[i][j] /= c;

    return *this;
}

// combined power and assignment operator
MAT_TEMPLATE inline matrixT&
matrixT::operator ^= (const size_t& pow) _THROW_MATRIX_ERROR
{
	matrixT temp(*this);

	for (size_t i=2; i <= pow; i++)
      *this = *this * temp;

	return *this;
}

// unary negation operator
MAT_TEMPLATE inline matrixT
matrixT::operator - () _NO_THROW
{
   matrixT temp(_m->Row,_m->Col);

   for (size_t i=0; i < _m->Row; i++)
      for (size_t j=0; j < _m->Col; j++)
	 temp._m->Val[i][j] = - _m->Val[i][j];

   return temp;
}

// binary addition operator
MAT_TEMPLATE inline matrixT
operator + (const matrixT& m1, const matrixT& m2) _THROW_MATRIX_ERROR
{
   matrixT temp = m1;
   temp += m2;
   return temp;
}

// binary subtraction operator
MAT_TEMPLATE inline matrixT
operator - (const matrixT& m1, const matrixT& m2) _THROW_MATRIX_ERROR
{
   matrixT temp = m1;
   temp -= m2;
   return temp;
}

// binary scalar multiplication operator
MAT_TEMPLATE inline matrixT
operator * (const matrixT& m, const T& no) _NO_THROW
{
   matrixT temp = m;
   temp *= no;
   return temp;
}


// binary scalar multiplication operator
MAT_TEMPLATE inline matrixT
operator * (const T& no, const matrixT& m) _NO_THROW
{
   return (m * no);
}

// binary matrix multiplication operator
MAT_TEMPLATE inline matrixT
operator * (const matrixT& m1, const matrixT& m2) _THROW_MATRIX_ERROR
{
   matrixT temp = m1;
   temp *= m2;
   return temp;
}

// binary scalar division operator
MAT_TEMPLATE inline matrixT
operator / (const matrixT& m, const T& no) _NO_THROW
{
    return (m * (T(1) / no));
}


// binary scalar division operator
MAT_TEMPLATE inline matrixT
operator / (const T& no, const matrixT& m) _THROW_MATRIX_ERROR
{
    return (!m * no);
}

// binary matrix division operator
MAT_TEMPLATE inline matrixT
operator / (const matrixT& m1, const matrixT& m2) _THROW_MATRIX_ERROR
{
    return (m1 * !m2);
}

// binary power operator
MAT_TEMPLATE inline matrixT
operator ^ (const matrixT& m, const size_t& pow) _THROW_MATRIX_ERROR
{
   matrixT temp = m;
   temp ^= pow;
   return temp;
}

// unary transpose operator
MAT_TEMPLATE inline matrixT
operator ~ (const matrixT& m) _NO_THROW
{
   matrixT temp(m.ColNo(),m.RowNo());

   for (size_t i=0; i < m.RowNo(); i++)
      for (size_t j=0; j < m.ColNo(); j++)
      {
         T x = m(i,j);
	      temp(j,i) = x;
      }
   return temp;
}

// unary inversion operator
MAT_TEMPLATE inline matrixT
operator ! (const matrixT m) _THROW_MATRIX_ERROR
{
   matrixT temp = m;
   return temp.Inv();
}

// inversion function
MAT_TEMPLATE inline matrixT
matrixT::Inv () _THROW_MATRIX_ERROR
{
   size_t i,j,k;
   T a1,a2,*rowptr;

   if (_m->Row != _m->Col)
      REPORT_ERROR( "matrixT::operator!: Inversion of a non-square matrix");

   matrixT temp(_m->Row,_m->Col);
   if (_m->Refcnt > 1) clone();


   temp.Unit();
   for (k=0; k < _m->Row; k++)
   {
      int indx = pivot(k);
      if (indx == -1)
	      REPORT_ERROR( "matrixT::operator!: Inversion of a singular matrix");

      if (indx != 0)
      {
	      rowptr = temp._m->Val[k];
	      temp._m->Val[k] = temp._m->Val[indx];
	      temp._m->Val[indx] = rowptr;
      }
      a1 = _m->Val[k][k];
      for (j=0; j < _m->Row; j++)
      {
	      _m->Val[k][j] /= a1;
	      temp._m->Val[k][j] /= a1;
      }
      for (i=0; i < _m->Row; i++)
	   if (i != k)
	   {
	      a2 = _m->Val[i][k];
	      for (j=0; j < _m->Row; j++)
	      {
	         _m->Val[i][j] -= a2 * _m->Val[k][j];
	         temp._m->Val[i][j] -= a2 * temp._m->Val[k][j];
	      }
	   }
   }
   return temp;
}

// solve simultaneous equation
MAT_TEMPLATE inline matrixT
matrixT::Solve (const matrixT& v) const _THROW_MATRIX_ERROR
{
   size_t i,j,k;
   T a1;

   if (!(_m->Row == _m->Col && _m->Col == v._m->Row))
      REPORT_ERROR( "matrixT::Solve():Inconsistent matrices!");

   matrixT temp(_m->Row,_m->Col+v._m->Col);
   for (i=0; i < _m->Row; i++)
   {
      for (j=0; j < _m->Col; j++)
	 temp._m->Val[i][j] = _m->Val[i][j];
      for (k=0; k < v._m->Col; k++)
	 temp._m->Val[i][_m->Col+k] = v._m->Val[i][k];
   }
   for (k=0; k < _m->Row; k++)
   {
      int indx = temp.pivot(k);
      if (indx == -1)
	 REPORT_ERROR( "matrixT::Solve(): Singular matrix!");

      a1 = temp._m->Val[k][k];
      for (j=k; j < temp._m->Col; j++)
	 temp._m->Val[k][j] /= a1;

      for (i=k+1; i < _m->Row; i++)
      {
	 a1 = temp._m->Val[i][k];
	 for (j=k; j < temp._m->Col; j++)
	   temp._m->Val[i][j] -= a1 * temp._m->Val[k][j];
      }
   }
   matrixT s(v._m->Row,v._m->Col);
   for (k=0; k < v._m->Col; k++)
      for (int m=int(_m->Row)-1; m >= 0; m--)
      {
	 s._m->Val[m][k] = temp._m->Val[m][_m->Col+k];
	 for (j=m+1; j < _m->Col; j++)
	    s._m->Val[m][k] -= temp._m->Val[m][j] * s._m->Val[j][k];
      }
   return s;
}

// set zero to all elements of this matrix
MAT_TEMPLATE inline void
matrixT::Null (const size_t& row, const size_t& col) _NO_THROW
{
    if (row != _m->Row || col != _m->Col)
	realloc( row,col);

    if (_m->Refcnt > 1) 
	clone();

    for (size_t i=0; i < _m->Row; i++)
	for (size_t j=0; j < _m->Col; j++)
	    _m->Val[i][j] = T(0);
    return;
}

// set zero to all elements of this matrix
MAT_TEMPLATE inline void
matrixT::Null() _NO_THROW
{
    if (_m->Refcnt > 1) clone();   
    for (size_t i=0; i < _m->Row; i++)
	for (size_t j=0; j < _m->Col; j++)
		_m->Val[i][j] = T(0);
    return;
}

// set this matrix to unity
MAT_TEMPLATE inline void
matrixT::Unit (const size_t& row) _NO_THROW
{
    if (row != _m->Row || row != _m->Col)
	realloc( row, row);
	
    if (_m->Refcnt > 1) 
	clone();

    for (size_t i=0; i < _m->Row; i++)
	for (size_t j=0; j < _m->Col; j++)
	    _m->Val[i][j] = i == j ? T(1) : T(0);
    return;
}

// set this matrix to unity
MAT_TEMPLATE inline void
matrixT::Unit () _NO_THROW
{
    if (_m->Refcnt > 1) clone();   
    size_t row = min(_m->Row,_m->Col);
    _m->Row = _m->Col = row;

    for (size_t i=0; i < _m->Row; i++)
	for (size_t j=0; j < _m->Col; j++)
	    _m->Val[i][j] = i == j ? T(1) : T(0);
    return;
}

// private partial pivoting method
MAT_TEMPLATE inline int
matrixT::pivot (size_t row)
{
  int k = int(row);
  double amax,temp;

  amax = -1;
  for (size_t i=row; i < _m->Row; i++)
    if ( (temp = abs( _m->Val[i][row])) > amax && temp != 0.0)
     {
       amax = temp;
       k = i;
     }
  if (_m->Val[k][row] == T(0))
     return -1;
  if (k != int(row))
  {
     T* rowptr = _m->Val[k];
     _m->Val[k] = _m->Val[row];
     _m->Val[row] = rowptr;
     return k;
  }
  return 0;
}

// calculate the determinant of a matrix
MAT_TEMPLATE inline T
matrixT::Det () const _THROW_MATRIX_ERROR
{
   size_t i,j,k;
   T piv,detVal = T(1);

   if (_m->Row != _m->Col)
      REPORT_ERROR( "matrixT::Det(): Determinant a non-square matrix!");
   
   matrixT temp(*this);
   if (temp._m->Refcnt > 1) temp.clone();

   for (k=0; k < _m->Row; k++)
   {
      int indx = temp.pivot(k);
      if (indx == -1)
	 return 0;
      if (indx != 0)
	 detVal = - detVal;
      detVal = detVal * temp._m->Val[k][k];
      for (i=k+1; i < _m->Row; i++)
      {
	 piv = temp._m->Val[i][k] / temp._m->Val[k][k];
	 for (j=k+1; j < _m->Row; j++)
	    temp._m->Val[i][j] -= piv * temp._m->Val[k][j];
      }
   }
   return detVal;
}

// calculate the norm of a matrix
MAT_TEMPLATE inline T
matrixT::Norm () _NO_THROW
{
   T retVal = T(0);

   for (size_t i=0; i < _m->Row; i++)
      for (size_t j=0; j < _m->Col; j++)
	 retVal += _m->Val[i][j] * _m->Val[i][j];
   retVal = sqrt( retVal);

   return retVal;
}

// calculate the condition number of a matrix
MAT_TEMPLATE inline T
matrixT::Cond () _NO_THROW
{
   matrixT inv = ! (*this);
   return (Norm() * inv.Norm());
}

// calculate the cofactor of a matrix for a given element
MAT_TEMPLATE inline T
matrixT::Cofact (size_t row, size_t col) _THROW_MATRIX_ERROR
{
   size_t i,i1,j,j1;

   if (_m->Row != _m->Col)
      REPORT_ERROR( "matrixT::Cofact(): Cofactor of a non-square matrix!");

   if (row > _m->Row || col > _m->Col)
      REPORT_ERROR( "matrixT::Cofact(): Index out of range!");

   matrixT temp (_m->Row-1,_m->Col-1);

   for (i=i1=0; i < _m->Row; i++)
   {
      if (i == row)
	continue;
      for (j=j1=0; j < _m->Col; j++)
      {
	 if (j == col)
	    continue;
	 temp._m->Val[i1][j1] = _m->Val[i][j];
	 j1++;
      }
      i1++;
   }
   T  cof = temp.Det();
   if ((row+col)%2 == 1)
      cof = -cof;

   return cof;
}


// calculate adjoin of a matrix
MAT_TEMPLATE inline matrixT
matrixT::Adj () _THROW_MATRIX_ERROR
{
   if (_m->Row != _m->Col)
      REPORT_ERROR( "matrixT::Adj(): Adjoin of a non-square matrix.");

   matrixT temp(_m->Row,_m->Col);

   for (size_t i=0; i < _m->Row; i++)
      for (size_t j=0; j < _m->Col; j++)
	  temp._m->Val[j][i] = Cofact(i,j);
   return temp;
}

// Determine if the matrix is singular
MAT_TEMPLATE inline bool
matrixT::IsSingular () _NO_THROW
{
   if (_m->Row != _m->Col)
      return false;
   return (Det() == T(0));
}

// Determine if the matrix is diagonal
MAT_TEMPLATE inline bool
matrixT::IsDiagonal () _NO_THROW
{
   if (_m->Row != _m->Col)
      return false;
   for (size_t i=0; i < _m->Row; i++)
     for (size_t j=0; j < _m->Col; j++)
	if (i != j && _m->Val[i][j] != T(0))
	  return false;
   return true;
}

// Determine if the matrix is scalar
MAT_TEMPLATE inline bool
matrixT::IsScalar () _NO_THROW
{
   if (!IsDiagonal())
     return false;
   T v = _m->Val[0][0];
   for (size_t i=1; i < _m->Row; i++)
     if (_m->Val[i][i] != v)
	return false;
   return true;
}

// Determine if the matrix is a unit matrix
MAT_TEMPLATE inline bool
matrixT::IsUnit () _NO_THROW
{
   if (IsScalar() && _m->Val[0][0] == T(1))
     return true;
   return false;
}

// Determine if this is a null matrix
MAT_TEMPLATE inline bool
matrixT::IsNull () _NO_THROW
{
   for (size_t i=0; i < _m->Row; i++)
      for (size_t j=0; j < _m->Col; j++)
	 if (_m->Val[i][j] != T(0))
	    return false;
   return true;
}

// Determine if the matrix is symmetric
MAT_TEMPLATE inline bool
matrixT::IsSymmetric () _NO_THROW
{
   if (_m->Row != _m->Col)
      return false;
   for (size_t i=0; i < _m->Row; i++)
      for (size_t j=0; j < _m->Col; j++)
	 if (_m->Val[i][j] != _m->Val[j][i])
	    return false;
   return true;
}
	   
// Determine if the matrix is skew-symmetric
MAT_TEMPLATE inline bool
matrixT::IsSkewSymmetric () _NO_THROW
{
   if (_m->Row != _m->Col)
      return false;
   for (size_t i=0; i < _m->Row; i++)
      for (size_t j=0; j < _m->Col; j++)
	 if (_m->Val[i][j] != -_m->Val[j][i])
	    return false;
   return true;
}
   
// Determine if the matrix is upper triangular
MAT_TEMPLATE inline bool
matrixT::IsUpperTriangular () _NO_THROW
{
   if (_m->Row != _m->Col)
      return false;
   for (size_t i=1; i < _m->Row; i++)
      for (size_t j=0; j < i-1; j++)
	 if (_m->Val[i][j] != T(0))
	    return false;
   return true;
}

// Determine if the matrix is lower triangular
MAT_TEMPLATE inline bool
matrixT::IsLowerTriangular () _NO_THROW
{
   if (_m->Row != _m->Col)
      return false;

   for (size_t j=1; j < _m->Col; j++)
      for (size_t i=0; i < j-1; i++)
	 if (_m->Val[i][j] != T(0))
	    return false;

   return true;
}

#ifndef _NO_NAMESPACE
} 
#endif

#endif //__STD_MATRIX_H

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产123区| 色婷婷av一区二区三区之一色屋| www.欧美日韩| 亚洲人成在线观看一区二区| 久久欧美一区二区| 精品成人私密视频| 久久亚洲欧美国产精品乐播| 2021中文字幕一区亚洲| 久久精品日韩一区二区三区| 国产日韩欧美麻豆| 国内精品不卡在线| 欧美日韩国产高清一区二区三区 | 欧美精品乱人伦久久久久久| 麻豆国产精品一区二区三区| 中文字幕一区二区三区精华液 | 日韩一区二区三区免费观看| 91 com成人网| 国产视频在线观看一区二区三区| 91麻豆成人久久精品二区三区| 性做久久久久久久免费看| 日本中文在线一区| 风流少妇一区二区| 一本一本大道香蕉久在线精品| 精品亚洲porn| 99精品久久免费看蜜臀剧情介绍| 精品一区二区在线播放| av中文字幕一区| 欧美人妇做爰xxxⅹ性高电影| 不卡的电视剧免费网站有什么| 午夜欧美电影在线观看| 久国产精品韩国三级视频| 成人av电影在线网| 国产a精品视频| 捆绑变态av一区二区三区| 成人高清免费在线播放| 欧美日韩精品一区二区三区蜜桃| 在线观看视频一区二区| 精品精品国产高清a毛片牛牛| 欧美日韩极品在线观看一区| 精品免费国产二区三区| 亚洲一区二区三区在线看| 亚洲精品高清视频在线观看| 亚洲综合成人网| 丰满少妇久久久久久久| 欧美伊人久久大香线蕉综合69| 99国产精品久久| 精品国产伦一区二区三区观看方式| 在线不卡一区二区| 亚洲欧洲日韩在线| 国产成人在线看| 欧美无乱码久久久免费午夜一区 | 欧美猛男男办公室激情| 国产欧美一区二区精品性色| 国产精品亚洲专一区二区三区| 三级一区在线视频先锋 | 国产精品黄色在线观看| 免费久久99精品国产| 欧美性受xxxx黑人xyx性爽| 亚洲欧洲日韩综合一区二区| 九九精品一区二区| 91精品国产综合久久福利| 亚洲色图一区二区| 成人av网站大全| 中文字幕av资源一区| 国产在线播精品第三| 日韩欧美国产系列| 日韩成人免费电影| 精品综合免费视频观看| 欧美一级黄色大片| 秋霞午夜av一区二区三区| 欧美在线看片a免费观看| 亚洲精品视频在线看| 成人少妇影院yyyy| 欧美三区免费完整视频在线观看| 成人免费高清视频在线观看| 精品国产污污免费网站入口| 无码av免费一区二区三区试看| 欧美国产成人精品| 国产成人一区在线| 中文字幕一区免费在线观看| 97久久超碰精品国产| 亚洲黄色av一区| 精品在线播放免费| 久久久久成人黄色影片| 不卡在线视频中文字幕| 亚洲欧洲国产日本综合| 在线欧美小视频| 日韩精品三区四区| 不卡视频一二三四| 中文字幕综合网| 精品综合免费视频观看| 欧美成人a∨高清免费观看| 麻豆91在线播放| 国产午夜精品一区二区三区视频 | 精品成a人在线观看| 国产剧情在线观看一区二区| 中文字幕av一区二区三区高| 日韩精品福利网| 26uuu国产日韩综合| 国产成人99久久亚洲综合精品| 在线播放91灌醉迷j高跟美女| 国产精品久久久久国产精品日日| 国产成人精品综合在线观看 | 久久99久久99精品免视看婷婷| 91视频一区二区| 水蜜桃久久夜色精品一区的特点| 99在线热播精品免费| 亚洲综合在线五月| 精品欧美一区二区三区精品久久| 亚洲高清不卡在线| xf在线a精品一区二区视频网站| 天堂va蜜桃一区二区三区漫画版| 91免费小视频| 免费一级片91| 日韩一区二区三区在线视频| 亚洲一级二级在线| 久久久99精品久久| 欧美精品一二三四| 91蜜桃婷婷狠狠久久综合9色| 国产精品久久久久久福利一牛影视| 国模无码大尺度一区二区三区| 欧美一区二区三区不卡| 午夜精品免费在线| 国产精品国模大尺度视频| 日韩久久精品一区| 欧美日韩高清在线| 色老头久久综合| 北条麻妃一区二区三区| 美女精品一区二区| 日韩av午夜在线观看| 日韩精品资源二区在线| 欧美猛男gaygay网站| 色综合久久99| 91小视频在线| 不卡视频一二三| 成人免费视频网站在线观看| 久久99热国产| 青青青伊人色综合久久| 亚洲成av人片www| 亚洲成人综合网站| 亚洲自拍偷拍网站| 亚洲一区二区三区三| 亚洲一区二区欧美日韩| 一区二区三区在线视频观看| 中文字幕精品一区二区精品绿巨人| 91在线观看视频| 成人性生交大片免费| 成人一区二区三区在线观看| 国产激情一区二区三区| 国产精品一区一区三区| 国产成人啪午夜精品网站男同| 亚洲少妇中出一区| 亚洲精品久久久蜜桃| 亚洲一区二区三区四区在线观看 | 成人性生交大片免费看中文| 亚洲夂夂婷婷色拍ww47| 亚洲老司机在线| 亚洲宅男天堂在线观看无病毒| 精品av综合导航| 久久久国产精品不卡| 国产欧美日韩另类一区| 337p粉嫩大胆噜噜噜噜噜91av| 色琪琪一区二区三区亚洲区| 色成年激情久久综合| 欧美午夜一区二区| 国产宾馆实践打屁股91| 日本中文在线一区| 国产精品一区在线观看乱码 | 日本乱人伦一区| 欧美专区日韩专区| 6080yy午夜一二三区久久| 日韩一区二区在线观看| 在线视频你懂得一区| 欧美日本在线看| 久久久噜噜噜久久中文字幕色伊伊| 欧美喷水一区二区| 欧美精品一区二区三区一线天视频| 色狠狠桃花综合| 成人午夜碰碰视频| 欧美色区777第一页| 精品国产青草久久久久福利| 在线播放视频一区| 国产色产综合产在线视频| 5858s免费视频成人| 中文字幕精品综合| 婷婷开心久久网| 国产一区二区精品久久91| 日韩av午夜在线观看| 亚洲狠狠爱一区二区三区| 亚洲人成亚洲人成在线观看图片| 国产日韩在线不卡| 一级女性全黄久久生活片免费| 亚洲国产成人一区二区三区| 午夜成人免费视频| 成人免费看黄yyy456| 日韩一级黄色大片| 亚洲自拍偷拍综合| 懂色av一区二区三区免费观看| 成人在线一区二区三区| 欧美一区二区三区公司|