Finding intersection points with refline
조회 수: 2 (최근 30일)
이전 댓글 표시
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
채택된 답변
Star Strider
2014년 6월 30일
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
Edwin
2015년 2월 24일
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
2015년 3월 22일
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, ...).
추가 답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!