Asked by Mahi Nazir
on 16 Jul 2013

I am plotting a 3D graph and a contour of the same. Then I plot few lines on the contour plot. I want to know the value of the contour where the line crosses the contour and also the coordinates where intersection happens. Can anyone please help me with this

Answer by Kelly Kearney
on 16 Jul 2013

I assume by 3D graph with contour, you mean you have 3D data represented in 2D by a contour plot? Or do you mean something like contour3 or isosurface?

Assuming the former, the coordinates of the contour lines generated via

[c,h] = contour(x,y,z);

are found in the `c` matrix. There are a few File Exchange functions (like contourcs) that can simplify the task of extracting those coordinates.

If you have the Mapping Toolbox, `polyxpoly` can calculate the line intersections. Otherwise, there are a bunch of FEX entries to calculate the intersections of two lines/curves (like this one).

Mahi Nazir
on 18 Jul 2013

Thanks kelly

I am quite new to matlab. Do I need to add contourcs in my library. I see thats its not already there?

And yes your assumption is right, 3D data represented in 2D by a contour plot.

The polyxpoly function is used for line intersections, does that include the contour as well, I am not sure? Your help would be greatly appreciated

Mahi Nazir
on 18 Jul 2013

Kelly Kearney
on 19 Jul 2013

Yes, to use the contourcs function, you need to download it from the File Exchange, and then either place it in the same folder as where you are working, or add it to your path (You can read up on that under the "Search Path" section of the documentation).

Here's a quick example of how to use those functions to calculate intersections:

% Some example data

[x,y,z] = peaks;

% Calculate the coordinates of the contour lines % (here, just the contour line at z = 0)

C = contourcs(x(1,:),y(:,1),z,[0 0]);

% Coordinates of the intersecting line

xln = [0 0]; yln = [-3 3];

% Use polyxpoly to find intersections

for ic = 1:length(C) [xint{ic}, yint{ic}] = polyxpoly(xln, yln, C(ic).X, C(ic).Y); end

xint = cat(1, xint{:}); yint = cat(1, yint{:});

% Plot the results

figure; contour(x,y,z,[0 0], 'k'); hold on; plot(xln, yln, 'b'); plot(xint, yint, 'r*');

Log in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Log in to comment.