13 Eigen::Vector2d pBase=p1;
14 Eigen::Vector2d dp=p2-p1;
15 double length=dp.norm();
17 double p=2*dp.dot(p1);
18 double q=p1.squaredNorm()-r2;
19 double disc = p*p - 4*q;
26 double t1=.5*(-p-disc);
27 double t2=.5*(-p+disc);
29 if ( t1 > length || t2 <0 )
54 int clipSegmentLine(Eigen::Vector2d& p1, Eigen::Vector2d& p2,
double a,
double b,
double c ){
57 if (a*p1.x()+b*p1.y()+c < 0){
60 if (a*p2.x()+b*p2.y()+c < 0){
63 if (p1inside && p2inside)
65 if (!p1inside && !p2inside)
68 Eigen::Vector2d dp=p2-p1;
69 double den=a*dp.x()+b*dp.y();
72 double num = c + a*p1.x()+b*p1.y();
82 int clipSegmentFov(Eigen::Vector2d& p1, Eigen::Vector2d& p2,
double min,
double max){
83 bool clip1 =
false, clip2 =
false;
85 double amin = sin(min), bmin = -cos(min);
99 double amax = -sin(max), bmax = cos(max);
122 Eigen::Vector2d dp=p2-p1;
123 lp[0]=atan2(-dp.x(), dp.y());
124 Eigen::Vector2d n(cos(lp[0]), sin(lp[0]));
125 lp[1]=n.dot(p1+p2)*.5;
Eigen::Vector2d computeLineParameters(const Eigen::Vector2d &p1, const Eigen::Vector2d &p2)
int clipSegmentLine(Eigen::Vector2d &p1, Eigen::Vector2d &p2, double a, double b, double c)
int clipSegmentCircle(Eigen::Vector2d &p1, Eigen::Vector2d &p2, double r)
int clipSegmentFov(Eigen::Vector2d &p1, Eigen::Vector2d &p2, double min, double max)