Filter löschen
Filter löschen

Finding intersection points with refline

3 Ansichten (letzte 30 Tage)
Vaultec
Vaultec am 30 Jun. 2014
Kommentiert: Star Strider am 22 Mär. 2015
Im trying to find the intersection points of a plot and a refline#
The reflines are the straight horizontal lines in the figure
I have attached the figures
Cant seem to figure out the code for it
Thanks in advance

Akzeptierte Antwort

Star Strider
Star Strider am 30 Jun. 2014
It would be easier if you defined both of your functions in each plot with the same X-data. Then you could use the much more efficient code in How to change axis of graph and interpolate data.
This works for today’s plots (I tested it on all of them):
% GET INFORMATON FROM FIGURE:
openfig('Figure(7).fig');
h1c = get(gca, 'Children');
Xdc = get(h1c, 'XData');
Ydc = get(h1c, 'YData');
maxlen = max(cell2mat(cellfun(@max, cellfun(@size, Xdc, 'Uni',0),'Uni',0)))
Xd2 = cell2mat(Xdc(2));
Yd2 = cell2mat(Ydc(2));
Xd = Xd2;
Yd1 = cell2mat(Ydc(1));
Yd = [Yd1(1)*ones(size(Xd2)); Yd2];
% CALCULATIONS:
Ydn = diff(Yd, [], 1); % Subtract line from curve to create zero-crossings
Zx = circshift(Ydn, [0 1]) .* Ydn; % Use circshift to detect them
Zxi = find(Zx < 0); % Their indices
for k1 = 1:length(Zxi) % Use interp1(Y,X,0) to get line intercepts as Xzx
Xzx(k1) = interp1([Ydn(Zxi(k1)-1) Ydn(Zxi(k1))], [Xd(1,Zxi(k1)-1) Xd(1,Zxi(k1))], 0);
end
% PLOT ZERO-CROSSINGS ON FIGURE TO CHECK:
hold on
plot(Xzx, repmat(Yd(1,1),1,length(Xzx)), '*r')
hold off
  8 Kommentare
Edwin
Edwin am 24 Feb. 2015
Hi,
This is a very great thread! Thank you for your elucidation on finding intersections on the current gca. I've been trying to understand the code better but I've seem to run into a bit of an issue. IDK if this is the correct analysis but this code seems to not work if there are an odd number of intersection points. Whenever there are even number of intersection points, it does seem to work. I thought a remedy to this would be to try to add an arbitrary line to increase the number of intersections to an even number but the added line seems to create another error.
In essence, to the original problem; whenever there are an odd number of intersections, I get the following error:
Attempted to access Ydn(0); index must be a positive integer or logical.
This seems to arise because Zxi has a value of '1' in its array. Again, I'm still trying to figure out exactly how the code works to find the intersection. But Any ideas or suggestions would be greatly appreciated. Thank you for your help!
Cheers
Star Strider
Star Strider am 22 Mär. 2015
The problem is not the code, but that you are attempting to reference ‘Ydn(0)’. Zero is not a positive integer. Arrays in MATLAB are only allowed to be positive integers: (1, 2, ...).

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by