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);
 }
Пример #2
0
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);
 }