33 QSSGPlane() =
default;
36
37
38 Q_ALWAYS_INLINE QSSGPlane(
float nx,
float ny,
float nz,
float distance) : n(nx, ny, nz), d(distance) {}
41
42
43 Q_ALWAYS_INLINE QSSGPlane(
const QVector3D &normal,
float distance) : n(normal), d(distance) {}
46
47
48 Q_ALWAYS_INLINE QSSGPlane(
const QVector3D &point,
const QVector3D &normal)
49 : n(normal), d(-QVector3D::dotProduct(point, n))
54
55
56 Q_ALWAYS_INLINE QSSGPlane(
const QVector3D &p0,
const QVector3D &p1,
const QVector3D &p2)
58 n = QVector3D::crossProduct(p1 - p0, p2 - p0).normalized();
59 d = QVector3D::dotProduct(-p0, n);
62 Q_ALWAYS_INLINE
float distance(
const QVector3D &p)
const {
return QVector3D::dotProduct(p, n) + d; }
64 Q_ALWAYS_INLINE
bool contains(
const QVector3D &p)
const {
return qAbs(distance(p)) < (1.0e-7f); }
67
68
69 Q_ALWAYS_INLINE QVector3D project(
const QVector3D &p)
const {
return p - n * distance(p); }
72
73
74 Q_ALWAYS_INLINE QVector3D pointInPlane()
const {
return -n * d; }
77
78