Пример #1
0
//if two points in the same plane
bool isInSamePlane(Point p1, Point p2, vector<pcl::KdTreeFLANN<Point>> trees){


  for(int i=0; i<trees.size(); i++){
    if(isInPlane(p1, trees.at(i))&&isInPlane(p2, trees.at(i))){
      return true;
    }
  }

  return false;
}
Пример #2
0
	float plane::distance(const vector3& p)const
	{
		if (isInPlane(p))
			return 0.0f;

		return (p - point_).dotProduct(norm_);
	}
Пример #3
0
	bool plane::isInPlane(const line& l)const
	{
		auto dot = norm_.dotProduct(l.dir());
		if (!floatEqual(dot, 0.0f))
			return false;

		return isInPlane(l.start());
	}
Пример #4
0
	std::pair<bool, vector3> plane::intersection(const line& l)const
	{
		auto ret = std::make_pair<bool, vector3>(false, vector3());
		if (isInPlane(l))
			return ret;

		ret.first = true;
		auto t = (norm_.dotProduct(point_) - norm_.dotProduct(l.start())) / (norm_.dotProduct(l.dir()));
		ret.second = l.start() + t * l.dir();
		return ret;
	}
Пример #5
0
// bb 가 보이는지를 판정한다
bool ROcclusionList::IsVisible(rboundingbox &bb)
{
	for(ROcclusionList::iterator i=begin();i!=end();i++)
	{
		ROcclusion *poc=*i;

		bool bVisible=false;

		for(int j=0;j<poc->nCount+1;j++)
		{
			if(isInPlane(&bb,&poc->pPlanes[j]))
			{
				bVisible=true;
				break;
			}
		}

		// 하나의 occlusion 에라도 가려져있으면 더이상 볼필요없다.
		if(!bVisible) 
			return false;
	}
	return true;
}