23 return CPoint3D(pt.
x * times, pt.
y * times, pt.
z * times);
28 return CPoint3D(pt.
x / times, pt.
y / times, pt.
z / times);
33 return CPoint3D(pt.
x * times, pt.
y * times, pt.
z * times);
39 pt1.
z * pt2.
x - pt1.
x * pt2.
z,
40 pt1.
x * pt2.
y - pt1.
y * pt2.
x);
45 return (pt2 - pt1) * (pt3 - pt2);
50 return pt1.
x * pt2.
x + pt1.
y * pt2.
y + pt1.
z * pt2.
z;
55 CPoint3D crossProduct = (pt2 - pt1) * (pt3 - pt2);
56 return 0.5 * crossProduct.
Len();
61 double cosAngle = (pt1 ^ pt2) / pt1.
Len() / pt2.
Len();
66 else if (cosAngle <= -1)
70 return acos(cosAngle);
77 double cosAngle = (u ^ v) / u.
Len() / v.
Len();
82 else if (cosAngle <= -1)
86 return acos(cosAngle);
91 return u[0] * v[0] + u[1] * v[1] + u[2] * v[2];
96 n[0] = u[1] * v[2] - u[2] * v[1];
97 n[1] = u[2] * v[0] - u[0] * v[2];
98 n[2] = u[0] * v[1] - u[1] * v[0];
103 float lenU =
sqrt(u[0] * u[0] + u[1] * u[1] + u[2] * u[2]);
104 float lenV =
sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
105 float dot =
VectorDot(u, v) / lenU / lenV;
120 return coef1 * pt1 + coef2 * pt2;
float VectorDot(const float *u, const float *v)
CPoint3D operator*(const CPoint3D &pt, double times)
EIGEN_DEVICE_FUNC const SqrtReturnType sqrt() const
CPoint3D VectorCross(const CPoint3D &pt1, const CPoint3D &pt2, const CPoint3D &pt3)
double AngleBetween(const CPoint3D &pt1, const CPoint3D &pt2)
CPoint3D CombineTwoNormalsTo(const CPoint3D &pt1, double coef1, const CPoint3D &pt2, double coef2)
EIGEN_DEVICE_FUNC const AcosReturnType acos() const
CPoint3D operator/(const CPoint3D &pt, double times)
const double RateOfNormalShift
double GetTriangleArea(const CPoint3D &pt1, const CPoint3D &pt2, const CPoint3D &pt3)
CPoint3D CombinePointAndNormalTo(const CPoint3D &pt, const CPoint3D &normal)
CPoint3D operator+(const CPoint3D &pt1, const CPoint3D &pt2)
double operator^(const CPoint3D &pt1, const CPoint3D &pt2)
CPoint3D operator-(const CPoint3D &pt1, const CPoint3D &pt2)