Finding intersection points with refline
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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
0 commentaires
Réponse acceptée
Star Strider
le 30 Juin 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 commentaires
Edwin
le 24 Fév 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
le 22 Mar 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, ...).
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Graphics Objects dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!