|
|
| Цитата | | ну так на ноль можно не умножать, если не хочешь, зато у тебя куча синусов. и с помощью матриц можно поворачивать не только в плоскости ху, и можно несколько поворотов представлять как один. |
| Цитата | | Обычно поворот состоит из 3-х поворотов вокруг 3-х осей. По твоему способу придется каждую точку повернуть 3 раза. Используя матрицу - 1 раз. Если к этому прибавить перемещение, то у тебя будут 4 действия (3 поворота + перемещение); используя матрицу - 1 действие. |
именно ето я и хотел сказать
| Цитата | вот, что я пытался сказать. я написал вот так:
template <class T> void CxVertex<T>::RotateX(double Angle) { T COS = cos(Angle); T SIN = sin(Angle); T Y, Z;
Y = y * COS - z * SIN; Z = y * SIN + z * COS; y = Y; z = Z; }
а если написать вот так:
template <class T> void CxVertex<T>::RotateX(double Angle) { CxMatrix <T> M(4,4); M.Fill(T(0)); M.At(0,0) = 1; M.At(1,1) = cos(Angle); M.At(2,2) = M.At(1,1); M.At(1,2) = -sin(Angle); M.At(2,1) = -M.At(1,2); v = M*v; }
то при v = M*v; будет происходить вот, что:
template <class T> CxMatrix<T>& CxMatrix<T>::operator *= (CxMatrix &m) { u_int i,j,k,Ni = GetNumRows(),Nj = GetNumColumns(); if(m.GetNumRows() != Nj) throw INVALID_MATRIX_SIZES; CxMatrix mRet(Ni,m.GetNumColumns()); T tFillValue = T(0); mRet.Fill(tFillValue); for(i = 0; i < Ni; i++) for(j = 0; j < m.GetNumColumns(); j++) for(k = 0; k < Nj; k++) mRet.At(i,j) += At(i,k)*m.At(k,j); *this = mRet; return *this; }
что есть не так круто, как первое. не знаю, вообще, как эти матрицы вообще используются здесь, если они столько ресурсов жрут. |
а ето я вобще не понял. я в етих с++ных заморочках ничо не понимаю, наверное у тебя тормозит не изза матриц, а именно изза них
|