/usr/include/libwildmagic/Wm5ConvexPolyhedron3.h is in libwildmagic-dev 5.13-1ubuntu3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | // Geometric Tools, LLC
// Copyright (c) 1998-2014
// Distributed under the Boost Software License, Version 1.0.
// http://www.boost.org/LICENSE_1_0.txt
// http://www.geometrictools.com/License/Boost/LICENSE_1_0.txt
//
// File Version: 5.0.0 (2010/01/01)
#ifndef WM5CONVEXPOLYHEDRON3_H
#define WM5CONVEXPOLYHEDRON3_H
#include "Wm5MathematicsLIB.h"
#include "Wm5Polyhedron3.h"
namespace Wm5
{
template <typename Real>
class ConvexPolyhedron3 : public Polyhedron3<Real>
{
public:
// Construction and destruction. The caller is responsible for ensuring
// that the mesh represents a convex polyhedron. The triangular faces
// must be ordered counterclockwise when viewed from outside the mesh.
//
// Polyhedron3 objects typically share data from other sources. The class
// uses smart pointers (Pointer1) to share the input arrays. If you
// do not want the class to delete the arrays, use your own smart pointers
// for the arrays.
//
// ConvexPolyhedron3 stores the planes associated with the faces; the
// plane normals are inner pointing. The planes may be supplied to the
// constructor, in which case a smart pointer is used to share them. If
// they are not passed ('planes' is null), the class automatically
// generates them.
// The plane representation is Dot(N,X) = c. The 'first' of the pair is
// a unit-length normal N to the plane. The 'second' of the pair is the
// plane constant c. X is any point on the plane.
typedef typename std::pair<Vector3<Real>, Real> NCPlane;
ConvexPolyhedron3 (int numVertices, Vector3<Real>* vertices,
int numTriangles, int* indices, NCPlane* planes);
ConvexPolyhedron3 (const ConvexPolyhedron3& polyhedron);
virtual ~ConvexPolyhedron3 ();
// Assignment.
ConvexPolyhedron3& operator= (const ConvexPolyhedron3& polyhedron);
// Read-only member access.
const NCPlane* GetPlanes () const;
const NCPlane& GetPlane (int i) const;
// Allow vertex modification. The caller must ensure that the polyhedron
// remains convex. After modifying as many vertices as you like, call
// UpdatePlanes(). The modifications are all done via SetVertex, and the
// planes are updated only for those triangles sharing the modified
// vertices.
virtual void SetVertex (int i, const Vector3<Real>& vertex);
void UpdatePlanes ();
// Test for convexity. This function will iterate over the faces of the
// polyhedron and verify for each face that the polyhedron vertices are
// all on the nonnegative side of the facet plane. A signed distance test
// is used, so a vertex is on the wrong side of a plane (for convexity)
// when its signed distance satisfies d < 0. Numerical round-off errors
// can generate incorrect convexity tests, so a small negative threshold
// t may be passed to this function, in which case the distance test
// becomes d < t < 0.
bool IsConvex (Real threshold = (Real)0) const;
// Point-in-polyhedron test, performed by which-side queries between the
// point and the planes of the faces, an O(n) algorithm for n vertices.
// This is not the optimal algorithm. TODO: Move the BSP-based algorithm
// to this class. It is an O(log n) algorithm.
bool Contains (const Vector3<Real>& p, Real threshold = (Real)0)
const;
protected:
using Polyhedron3<Real>::mNumVertices;
using Polyhedron3<Real>::mVertices;
using Polyhedron3<Real>::mNumTriangles;
using Polyhedron3<Real>::mNumIndices;
using Polyhedron3<Real>::mIndices;
// Support for efficient updating of facet planes. The set stores the
// indices for those triangles that share modified vertices.
void UpdatePlane (int i, const Vector3<Real>& average);
// The number of planes is the number of triangles.
Pointer1<NCPlane> mPlanes;
// The sharing triangles processed by UpdatePlane.
std::set<int> mSharingTriangles;
};
#include "Wm5ConvexPolyhedron3.inl"
typedef ConvexPolyhedron3<float> ConvexPolyhedron3f;
typedef ConvexPolyhedron3<double> ConvexPolyhedron3d;
}
#endif
|