22 using Rational = mpq_class;
43 Rational ax(a.x()), ay(a.y());
44 Rational bx(b.x()), by(b.y());
45 Rational cx(c.x()), cy(c.y());
46 Rational det = (bx - ax) * (cy - ay) - (by - ay) * (cx - ax);
47 int s = mpq_sgn(det.get_mpq_t());
65 Rational ax(a.x()), ay(a.y()), az(a.z());
66 Rational bx(b.x()), by(b.y()), bz(b.z());
67 Rational cx(c.x()), cy(c.y()), cz(c.z());
68 Rational dx(d.x()), dy(d.y()), dz(d.z());
70 Rational adx = ax - dx, ady = ay - dy, adz = az - dz;
71 Rational bdx = bx - dx, bdy = by - dy, bdz = bz - dz;
72 Rational cdx = cx - dx, cdy = cy - dy, cdz = cz - dz;
74 Rational det = adx * (bdy * cdz - bdz * cdy)
75 + bdx * (cdy * adz - cdz * ady)
76 + cdx * (ady * bdz - adz * bdy);
78 int s = mpq_sgn(det.get_mpq_t());
96 Rational ax(a.x()), ay(a.y());
97 Rational bx(b.x()), by(b.y());
98 Rational cx(c.x()), cy(c.y());
99 Rational dx(d.x()), dy(d.y());
101 Rational adx = ax - dx, ady = ay - dy;
102 Rational bdx = bx - dx, bdy = by - dy;
103 Rational cdx = cx - dx, cdy = cy - dy;
105 Rational ab = adx * bdy - ady * bdx;
106 Rational bc = bdx * cdy - bdy * cdx;
107 Rational ca = cdx * ady - cdy * adx;
108 Rational al = adx * adx + ady * ady;
109 Rational bl = bdx * bdx + bdy * bdy;
110 Rational cl = cdx * cdx + cdy * cdy;
112 Rational det = al * bc + bl * ca + cl * ab;
113 int s = mpq_sgn(det.get_mpq_t());
Orientation orient_3d(const Point3D &a, const Point3D &b, const Point3D &c, const Point3D &d)
自适应精度三维定向测试
Orientation orient_2d(const Point2D &a, const Point2D &b, const Point2D &c)
自适应精度二维定向测试(Shewchuk 算法)
CircleTest in_circle(const Point2D &a, const Point2D &b, const Point2D &c, const Point2D &d)
自适应精度圆内测试(In-Circle Test)
Point< double, 2 > Point2D
双精度二维点
Point< double, 3 > Point3D
双精度三维点