35 QSSGPlane() =
default;
38
39
40 Q_ALWAYS_INLINE QSSGPlane(
float nx,
float ny,
float nz,
float distance) : n(nx, ny, nz), d(distance) {}
43
44
45 Q_ALWAYS_INLINE QSSGPlane(
const QVector3D &normal,
float distance) : n(normal), d(distance) {}
48
49
50 Q_ALWAYS_INLINE QSSGPlane(
const QVector3D &point,
const QVector3D &normal)
51 : n(normal), d(-QVector3D::dotProduct(point, n))
56
57
58 Q_ALWAYS_INLINE QSSGPlane(
const QVector3D &p0,
const QVector3D &p1,
const QVector3D &p2)
60 n = QVector3D::crossProduct(p1 - p0, p2 - p0).normalized();
61 d = QVector3D::dotProduct(-p0, n);
64 Q_ALWAYS_INLINE
float distance(
const QVector3D &p)
const {
return QVector3D::dotProduct(p, n) + d; }
66 Q_ALWAYS_INLINE
bool contains(
const QVector3D &p)
const {
return qAbs(distance(p)) < (1.0e-7f); }
69
70
71 Q_ALWAYS_INLINE QVector3D project(
const QVector3D &p)
const {
return p - n * distance(p); }
74
75
76 Q_ALWAYS_INLINE QVector3D pointInPlane()
const {
return -n * d; }
79
80