Node:Ellipse Intersections, Next:Solving Ellipses, Previous:Returning Elements and Information for Ellipses, Up:Ellipse Reference
| bool_point_pair intersection_points (const Point& p0, const Point& p1) | const virtual function |
| bool_point_pair intersection_points (const Path& p) | const virtual function |
These functions return the intersection points of a line with an
Ellipse. In the first version, the line is specified by the two
Point arguments.
In the second version, p.is_linear() must return true,
otherwise, intersection_points() issues an error message and
returns INVALID_BOOL_POINT_PAIR.
If the line and the Ellipse e(origin, 5, 7, 30, 30, 30);
e.shift(3, 0, 3);
Point p0 = e.get_center().mediate(e.get_point(3));
Point normal = e.get_normal();
Point A = normal;
A *= 2.5;
A.shift(p0);
Point B = normal;
B *= -2.5;
B.shift(p0);
bool_point_pair bpp = e.intersection_points(A, B);
bpp.first.pt.dotlabel("$i_0$", "rt");
Point C = e.get_point(15).mediate(e.get_point(11), 1.25);
Point D = e.get_point(11).mediate(e.get_point(15), 1.5);
Path q = C.draw(D);
bpp = e.intersection_points(q);
bpp.first.pt.dotlabel("$i_1$", "llft");
bpp.second.pt.dotlabel("$i_2$", "ulft");
|
bool_point_quadruple intersection_points (Ellipse e, [const real step = 3, [bool verbose = false]])
|
const virtual function |
Returns the intersection points of two Ellipses. Two Ellipses
can intersect at at most four points.
Let bpq be the The step argument is used when the If the verbose argument is In [next figure]
, the Ellipse e(origin, 5, 2);
Ellipse f(origin, 2, 5);
bool_point_quadruple bpq = e.intersection_points(f);
bpq.first.pt.dotlabel(1, "llft");
bpq.second.pt.dotlabel(2, "urt");
bpq.third.pt.dotlabel(3, "ulft");
bpq.fourth.pt.dotlabel(4, "lrt");
In [next figure] , e and f are coplanar, but don't lie in a major plane, have different centers, and only intersect at two points. Ellipse e(origin, 4, 2);
Ellipse f(origin, 2, 5);
f.shift(0, 0, 1);
f.rotate(0, 15);
f.shift(1, 0, 1);
e *= f.shift(-.25, 1, -1);
e *= f.rotate(10, -12.5, 3);
bool_point_quadruple bpq = e.intersection_points(f, true);
bpq.first.pt.dotlabel(1, "urt");
bpq.second.pt.dotlabel(2, "ulft");
If the planes of the In [next figure]
, the two Ellipse e(origin, 5, 3);
Ellipse f(origin, 2, 5);
f.rotate(0, 0, 30);
f.rotate(0, 10);
f.rotate(45);
f.shift(1.5, 1);
bool_point_quadruple bpq = e.intersection_points(f, true);
bpq.first.pt.dotlabel(1);
bpq.second.pt.dotlabel(2);
bpq.third.pt.dotlabel(3, "rt");
bpq.fourth.pt.dotlabel(4, "urt");
-| First point lies on the perimeter of *this.
First point lies inside e.
Second point lies on the perimeter of *this.
Second point lies outside e.
Third point lies outside *this.
Third point lies on the perimeter of e.
Fourth point lies inside *this.
Fourth point lies on the perimeter of e.
In [next figure]
, the two Ellipse e(origin, 5, 3);
Ellipse f(origin, 2, 5, 45);
f.shift(0, 2.5, 3);
bool_point_quadruple bpq = e.intersection_points(f, true);
bpq.first.pt.dotlabel(1);
bpq.second.pt.dotlabel(2);
-| First point lies on the perimeter of *this.
First point lies outside e.
Second point lies on the perimeter of *this.
Second point lies outside e.
Third intersection point is INVALID_POINT.
Fourth intersection point is INVALID_POINT.
|