File Exchange

image thumbnail

Conics intersection

version (6.54 KB) by Pierluigi Taddei
Given the homogeneous matrices of two conics it recovers the (up to) four intersection points


Updated 30 Aug 2015

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:
and a detailed example describing the method:

A C++ open souce implementation is also present at

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

Comments and Ratings (4)


seems it's not working on the following case:

0.3xy + 0.6y - 0.8 =0

the codes generates different plots compared with Wolfram



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.

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


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


added C++ link

summary update

added case for linear equations

v.1.0.3: bug fixes (degenerate case)

changed URL

MATLAB Release Compatibility
Created with R2008a
Compatible with any release
Platform Compatibility
Windows macOS Linux

Discover Live Editor

Create scripts with code, output, and formatted text in a single executable document.

Learn About Live Editor