Vector ClosestPointPoly ( Vector const & V, VertexList const & vertices )
{
	if(vertices.size() == 0) return V;

	if(vertices.size() == 1) return vertices[0];

	if(vertices.size() == 2) return ClosestPointSeg( V, Segment3d(vertices[0],vertices[1]) );

	// ----------

	Vector closest = ClosestPointTri( V, Triangle3d(vertices[0],vertices[1],vertices[2]) );

	int nTris = vertices.size() - 2;

	for(int i = 1; i < nTris; i++)
	{
		Triangle3d tri( vertices[0], vertices[i+1], vertices[i+2] );

		Vector temp = ClosestPointTri(V,tri);

		closest = selectCloser(V,closest,temp);
	}

	return closest;
}
Beispiel #2
0
TEST(Objects, GetBoundingBox) {
    Triangle3d triangle(Point(-1, -10, 2), Point(1, 0, -2), Point(0, 1, 0));
    ASSERT_EQ(triangle.getBoundingBox().minCorner, Point(-1, -10, -2));
    ASSERT_EQ(triangle.getBoundingBox().maxCorner, Point(1, 1, 2));
    Triangle3d triangle2 = Triangle3d(Point(0, 0, 0), Point(1, 0, 0), Point(0, 1, 0));
    ASSERT_EQ(triangle2.getBoundingBox().minCorner, Point(0, 0, 0));
    ASSERT_EQ(triangle2.getBoundingBox().maxCorner, Point(1, 1, 0));
}
 inline
 Triangle3d
 Triangle3d::projectedOnto(const Plane3d& plane) const {
     return Triangle3d(
         vertex(0).projectedOnto(plane),
         vertex(1).projectedOnto(plane),
         vertex(2).projectedOnto(plane),
         handedness()
     );
 }
Beispiel #4
0
 Renderable Triangle3d::operator*(Matrix m) {
   return Triangle3d(m*a,m*b,m*c);
 }
Beispiel #5
0
 Renderable Triangle3d::rotated(V3d ax,float ang) {
   return Triangle3d(a.rotated(ax,ang),b.rotated(ax,ang),c.rotated(ax,ang));
 }
Beispiel #6
0
 Renderable Triangle3d::translated(V3d t) {
   return Triangle3d(a+t,b+t,c+t);
 }