/usr/include/libwildmagic/Wm5NaturalSpline3.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 | // 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.3 (2012/06/24)
#ifndef WM5NATURALSPLINE3_H
#define WM5NATURALSPLINE3_H
#include "Wm5MathematicsLIB.h"
#include "Wm5MultipleCurve3.h"
namespace Wm5
{
template <typename Real>
class WM5_MATHEMATICS_ITEM NaturalSpline3 : public MultipleCurve3<Real>
{
public:
enum BoundaryType
{
BT_FREE,
BT_CLAMPED,
BT_CLOSED
};
// Construction and destruction.
// 1. If N is the number of points, the number of segments must be N-1.
// 2. NaturalSpline3 accepts responsibility for deleting the input
// arrays, so these arrays must be dynamically allocated by the
// caller.
// 3. When the boundary type is BT_CLAMPED, the endpoint derivatives are
// automatically chosen to be
// derivativeStart = points[1] - points[0]
// derivativeFinal = points[N] - points[N-1]
// To specify the derivatives for BT_CLAMPED, use the second
// constructor listed below.
NaturalSpline3 (BoundaryType type, int numSegments, Real* times,
Vector3<Real>* points);
// Specify the derivative vectors for clamped splines.
NaturalSpline3 (int numSegments, Real* times, Vector3<Real>* points,
const Vector3<Real>& derivativeStart,
const Vector3<Real>& derivativeFinal);
virtual ~NaturalSpline3 ();
const Vector3<Real>* GetPoints () const;
virtual Vector3<Real> GetPosition (Real t) const;
virtual Vector3<Real> GetFirstDerivative (Real t) const;
virtual Vector3<Real> GetSecondDerivative (Real t) const;
virtual Vector3<Real> GetThirdDerivative (Real t) const;
protected:
using MultipleCurve3<Real>::mNumSegments;
using MultipleCurve3<Real>::mTimes;
using MultipleCurve3<Real>::GetSpeedWithData;
using MultipleCurve3<Real>::GetKeyInfo;
void CreateFreeSpline ();
void CreateClampedSpline (const Vector3<Real>& derivativeStart,
const Vector3<Real>& derivativeFinal);
void CreateClosedSpline ();
virtual Real GetSpeedKey (int key, Real t) const;
virtual Real GetLengthKey (int key, Real t0, Real t1) const;
Vector3<Real>* mA;
Vector3<Real>* mB;
Vector3<Real>* mC;
Vector3<Real>* mD;
class WM5_MATHEMATICS_ITEM SplineKey
{
public:
SplineKey (const NaturalSpline3* spline, int key);
const NaturalSpline3* Spline;
int Key;
};
};
typedef NaturalSpline3<float> NaturalSpline3f;
typedef NaturalSpline3<double> NaturalSpline3d;
}
#endif
|