39 Eigen::Vector2d pBase = p1;
40 Eigen::Vector2d dp = p2 - p1;
41 double length = dp.norm();
43 double p = 2 * dp.dot(p1);
44 double q = p1.squaredNorm() - r2;
45 double disc = p * p - 4 * q;
52 double t1 = .5 * (-p - disc);
53 double t2 = .5 * (-p + disc);
55 if (t1 > length || t2 < 0)
return -1;
85 if (a * p1.x() + b * p1.y() + c < 0) {
88 if (a * p2.x() + b * p2.y() + c < 0) {
91 if (p1inside && p2inside)
return 2;
92 if (!p1inside && !p2inside)
return -1;
94 Eigen::Vector2d dp = p2 - p1;
95 double den = a * dp.x() + b * dp.y();
96 if (den == 0)
return -1;
97 double num = c + a * p1.x() + b * p1.y();
98 double t = -num / den;
109 bool clip1 =
false, clip2 =
false;
111 double amin = sin(min), bmin = -cos(min);
125 double amax = -sin(max), bmax = cos(max);
149 const Eigen::Vector2d& p2) {
151 Eigen::Vector2d dp = p2 - p1;
152 lp[0] = atan2(-dp.x(), dp.y());
153 Eigen::Vector2d n(cos(lp[0]), sin(lp[0]));
154 lp[1] = n.dot(p1 + p2) * .5;
Eigen::Vector2d computeLineParameters(const Eigen::Vector2d &p1, const Eigen::Vector2d &p2)
int clipSegmentCircle(Eigen::Vector2d &p1, Eigen::Vector2d &p2, double r)
int clipSegmentFov(Eigen::Vector2d &p1, Eigen::Vector2d &p2, double min, double max)
int clipSegmentLine(Eigen::Vector2d &p1, Eigen::Vector2d &p2, double a, double b, double c)