File Exchange

image thumbnail

Conics intersection

version 1.5 (6.54 KB) by

Given the homogeneous matrices of two conics it recovers the (up to) four intersection points

7 Downloads

Updated

View License

The homogeneous representation of a conic is a matrix
 m = [A C D; C B E; D E F] that represents the equation
 A x^2 + B y^2 + 2C xy + 2D x + 2Ey + F = 0
Given two matrix E1 and E2 representing two conics, the code will detect all their intersections.

For instance:
___________________
%a circle centered in the origin
E1 = [1 0 0; 0 1 0; 0 0 -3]

%an ellipse centered in the origin
E2 = [1 0 0; 0 3 0; 0 0 -6]

%get the four homogeneous intersections
P = intersectConics(E1, E2)

%plot the normalized points
plot(P(1,:) ./ P(3,:) , P(2,:) ./ P(3,:), 'ro');

___________________
For more info: http://www.pigei.com/conics-intersection
and a detailed example describing the method: http://math.stackexchange.com/questions/316849/intersection-of-conics-using-matrix-representation

A C++ open souce implementation is also present at https://bitbucket.org/pierluigi/conicsintersection

___________________
If this code was useful, please consider a donation:
Bitcoin: 3BUD7cEnbpp15hZXbPZpdgnH11FAV1kvfi

Comments and Ratings (4)

wenbo

wenbo (view profile)

seems it's not working on the following case:

0.3xy + 0.6y - 0.8 =0

the codes generates different plots compared with Wolfram

Shahab

Shahab (view profile)

do

do (view profile)

I did make a mistake. The matrix of the second conic was wrong so your code cannot find the intersections. I checked my code and I found that the matrix of the second conic should be
E2 =[ -0.1642 0 0.1642;
         0 8.8358 -15.4627;
      0.1642 -15.4627 26.3578]

After receiving your email, I checked my code and corrected the second matrix. YOUR CODE WORKED PERFECTLY AND GAVE THE EXACT SOLUTION. Here is the result.

http://imageshack.us/a/img401/8209/83223264.png

Thank you very much for sharing your code and I really appreciate your kindness to reply my email and help me solve the problem.

do

do (view profile)

the code doesn't work. I tried with two conics having the matrix

E1 =[ 8.5914 0 -15.0350
         0 -0.4086 0.4086
      -15.0350 0.4086 24.5709]

E2 =[ 8.8358 0 -15.4627
         0 -0.1642 0.1642
     -15.4627 0.1642 26.3578]

but the result is an empty intersection matrix. Though these two conics have 4 intersections as you can see in the figure I wrote in Matlab

http://imageshack.us/a/img90/4468/38292011.png

Updates

1.5

added C++ link

1.5

summary update

1.4

added case for linear equations

1.3

v.1.0.3: bug fixes (degenerate case)

1.1

changed URL

MATLAB Release
MATLAB 7.6 (R2008a)

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video