The mechanism for adding an object to a proportion page works best if only one object is returned.
The functions "addFirstIntersection" and "addSecondIntersection" always return some single thing.

Both functions take three arguments: two things to intersect, and an extra point. Often, the extra point is not used at all.

Two lines intersect at one point, or not at all. If the lines are parallel, "addFirst" does nothing and returns the integer 0, which is the NULL object. Nothing can touch NULL, and NULL can't be used to make lines or circles-- if you try, you just get NULL again.

If you intersect two lines, and they do touch, "addFirstIntersection" adds the point at which they touch, and "addSecond" returns NULL.

If you intersect a line and circle, or two circles, and they don't touch, "addFirst" and "addSecond" both return NULL.

If you intersect a line and circle or two circles and they touch at one point, "addFirst" returns that point, and "addSecond" returns NULL.

If you intersect line/circle or circles, and they touch at two points, then the extra point is used to select which point to return.

If there are two points of intersection, "addFirst" returns the point of intersection closest to the extra point, and "addSecond" returns the point further away.

If the two points are equidistant, you messed up! But "addFirst" will return the point with the lower Y coordinate. If the two points have the same Y, "addFirst" returns the one with the lower X. The the two points have the same X and Y, there's only one point, so we already took care of that.

Please look at the source code of this page for more information.

Both functions take three arguments: two things to intersect, and an extra point. Often, the extra point is not used at all.

Two lines intersect at one point, or not at all. If the lines are parallel, "addFirst" does nothing and returns the integer 0, which is the NULL object. Nothing can touch NULL, and NULL can't be used to make lines or circles-- if you try, you just get NULL again.

If you intersect two lines, and they do touch, "addFirstIntersection" adds the point at which they touch, and "addSecond" returns NULL.

If you intersect a line and circle, or two circles, and they don't touch, "addFirst" and "addSecond" both return NULL.

If you intersect a line and circle or two circles and they touch at one point, "addFirst" returns that point, and "addSecond" returns NULL.

If you intersect line/circle or circles, and they touch at two points, then the extra point is used to select which point to return.

If there are two points of intersection, "addFirst" returns the point of intersection closest to the extra point, and "addSecond" returns the point further away.

If the two points are equidistant, you messed up! But "addFirst" will return the point with the lower Y coordinate. If the two points have the same Y, "addFirst" returns the one with the lower X. The the two points have the same X and Y, there's only one point, so we already took care of that.

Please look at the source code of this page for more information.