Pos3D randDir(Pos3D dir,float angle) { return getRandDirOrtho(dir); cdebug("dir:"<<dir); dir=dir.normalized(); cdebug("dir:"<<dir); Pos3D normal=getRandDirOrtho(dir).normalized(); cdebug("normal:"<<normal); cdebug("*:"<<normal*dir); Pos3D res=rotVector(dir,normal,angle); cdebug("res:"<<res); return res; }
std::list<Pos3D> splitDir(Pos3D dir,int count,float angle,float sp_noise,float tu_noise) { std::list<Pos3D> l; Pos3D myNorm=getRandDirOrtho(dir).normalized(); Pos3D myBinorm=(dir%myNorm).normalized(); for(int i=0;i<count;i++) { float ma=i*2*M_PI/count + getRandEq()*sp_noise; Pos3D norm=myNorm*sin(ma)+myBinorm*cos(ma); Pos3D r=rotVector(dir,norm,angle+getRandEq()*tu_noise).normalized(); l.push_back(r); } return l; }
Foam::vector Foam::finiteRotation::rotVectorAverage() const { return rotVector(rotTensorAverage()); }
Foam::vector Foam::finiteRotation::rotIncrementVector() const { return rotVector(rotIncrementTensor_); }
Foam::HamiltonRodriguezRot Foam::finiteRotation::eCurrent() const { return HamiltonRodriguezRot(rotVector(), rotAngle()); }