inline Quaternion3d::Quaternion(const UnitVector3d& unitVector, double angle) { double halfAngle = 0.5 * angle; double sinHalfAngle = sin(halfAngle); _components(0) = unitVector.x() * sinHalfAngle; _components(1) = unitVector.y() * sinHalfAngle; _components(2) = unitVector.z() * sinHalfAngle; _components(3) = cos(halfAngle); }
void SemiSupervisedKernel::connectedComponent( std::vector<std::vector<int> >* pComponentArray) { std::vector<int> component(num_vertices(mMustLinkGraph)); int num = connected_components(mMustLinkGraph, &component[0]); pComponentArray->resize(num); std::vector<int> _dummy; pComponentArray->assign(num, _dummy); std::vector<std::vector<int> > _components(num, _dummy); VertexIter vi, vi_end; for (tie(vi, vi_end) = vertices(mMustLinkGraph); vi != vi_end; vi++) { int ccIndex = component[*vi]; _components[ccIndex].push_back((int) (*vi)); } std::vector<RankItem<int, int> > rankList; for (size_t i = 0; i < _components.size(); ++i) { RankItem<int, int> item((int) i, -1 * (int) _components[i].size()); rankList.push_back(item); } std::sort(rankList.begin(), rankList.end()); for (size_t i = 0; i < _components.size(); ++i) { int index = rankList[i].index; pComponentArray->at(i) = _components[index]; } }
inline double Quaternion3d::w() const { return _components(3); }