This file is indexed.

/usr/include/libwildmagic/Wm5Ellipse2.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
// 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 WM5ELLIPSE2_H
#define WM5ELLIPSE2_H

#include "Wm5MathematicsLIB.h"
#include "Wm5EigenDecomposition.h"

namespace Wm5
{

template <typename Real>
class Ellipse2
{
public:
    // An ellipse has center K, axis directions U[0] and U[1] (both
    // unit-length vectors), and extents e[0] and e[1] (both positive
    // numbers).  A point X = K+y[0]*U[0]+y[1]*U[1] is on the ellipse whenever
    // (y[0]/e[0])^2+(y[1]/e[1])^2 = 1.  The test for a point inside the
    // ellipse uses "<=" instead of "=" in the previous expression.  An
    // algebraic representation for the ellipse is
    //   1 = (X-K)^T * (U[0]*U[0]^T/e[0]^2 + U[1]*U[1]^T/e[1]^2) * (X-K)
    //     = (X-K)^T * M * (X-K)
    // where the superscript T denotes transpose.  Observe that U[i]*U[i]^T
    // is a matrix, not a scalar dot product.  The matrix M is symmetric.
    // The ellipse is also represented by a quadratic equation
    //   0 = a0 + a1*x[0] + a2*x[1] + a3*x[0]^2 + a4*x[0]*x[1] + a5*x[1]^2
    //     = a0 + [a1 a2]*X + X^T*[a3   a4/2]*X
    //                            [a4/2 a5  ]
    //     = C + B^T*X + X^T*A*X
    // where X = (x[0],x[1]).  This equation can be factored to the form
    // (X-K)^T*M*(X-K) = 1, where K = -A^{-1}*B/2, M = A/(B^T*A^{-1}*B/4-C).
    // To be an ellipse, M must have all positive eigenvalues.

    // Construction and destruction.
    Ellipse2 ();  // uninitialized
    ~Ellipse2 ();

    Ellipse2 (const Vector2<Real>& center, const Vector2<Real> axis[2],
        const Real extent[2]);

    Ellipse2 (const Vector2<Real>& center, const Vector2<Real>& axis0,
        const Vector2<Real>& axis1, const Real extent0, const Real extent1);

    // Compute M = sum_{i=0}^1 U[i]*U[i]^T/e[i]^2.
    void GetM (Matrix2<Real>& M) const;

    // Compute M^{-1} = sum_{i=0}^1 U[i]*U[i]^T*e[i]^2.
    void GetMInverse (Matrix2<Real>& MInverse) const;

    // Construct the coefficients in the quadratic equation that represents
    // the ellipse.  'coeff' stores a0 through a5.  'A', 'B', and 'C' are as
    // described in the comments before the constructors.
    void ToCoefficients (Real coeff[6]) const;
    void ToCoefficients (Matrix2<Real>& A, Vector2<Real>& B,
        Real& C) const;

    // Construct C, U[i], and e[i] from the quadratic equation.  The return
    // value is 'true' if and only if the input coefficients represent an
    // ellipse.  If the function returns 'false', the ellipse data members
    // are undefined.  'coeff' stores a0 through a5.  'A', 'B', and 'C' are as
    // described in the comments before the constructors.
    bool FromCoefficients (const Real coeff[6]);
    bool FromCoefficients (const Matrix2<Real>& A,
        const Vector2<Real>& B, Real C);

    // Evaluate the quadratic function Q(X) = (X-K)^T * M * (X-K) - 1.
    Real Evaluate (const Vector2<Real>& point) const;

    // Test whether the input point is inside or on the ellipse.  The point
    // is contained when Q(X) <= 0, where Q(X) is the function in the comment
    // before the function Evaluate().
    bool Contains (const Vector2<Real>& point) const;

    Vector2<Real> Center;
    Vector2<Real> Axis[2];
    Real Extent[2];

private:
    static void Convert (const Real coeff[6], Matrix2<Real>& A,
        Vector2<Real>& B, Real& C);

    static void Convert (const Matrix2<Real>& A, const Vector2<Real>& B,
        Real C, Real coeff[6]);
};

#include "Wm5Ellipse2.inl"

typedef Ellipse2<float> Ellipse2f;
typedef Ellipse2<double> Ellipse2d;

}

#endif