Draw a line between two points
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi. I have three points [5.2 0 0 0 9.9 0 0 12.1]. How to draw a line through the first two points and find is the third point (12.1) above/below this line.
5 Kommentare
Akzeptierte Antwort
Evan
am 17 Jul. 2013
Bearbeitet: Evan
am 17 Jul. 2013
P = [1 5.2; 2 0; 3 0; 4 0; 5 9.9; 6 0; 7 0; 8 12.1];
posP = find(P(:,2)); %find where y values aren't zero.
C = polyfit(P(posP(1:2),1),P(posP(1:2),2),1); %fit line to first and second nonzero
Y = polyval(C,P(posP(3),1)); %find value on line at x-value of third nonzero
if Y == P(posP(3),2)
disp('The third point falls on the line')
elseif Y > P(posP(3),1)
disp('The third point falls above the line')
elseif Y < P(posP(3),1)
disp('The third point falls below the line')
end
0 Kommentare
Weitere Antworten (3)
Iain
am 17 Jul. 2013
This is the raw maths...
point1 = [x1 y1];
point2 = [x2 y2];
point3 = [x3 y3];
m = (y2 - y1) / (x2 - x1);
c = y2 - m*x2;
y3_est = m*x3 + c;
if y3_est > y3
disp('point below line')
elseif y3_est == y3
disp('colinear')
else
disp('point above line')
end
0 Kommentare
Kiran Sagar
am 17 Jul. 2013
Frame an equation between two of the points of the form y=mx+c. then replace x with the x-cordinate of the point to be checked, compare the resultant y with the point's y cordinate. that's it. supposing your two points forming the line are the first and last rows of the matrix A, and the test point as one of the in between points, here is a probable code:
A = [1 5.2;
2 0;
3 0;
4 0;
5 9.9;];
m = (A(5,2)-A(1,2))/(A(5,1)-A(1,1));
c = A(1,2)-m*A(1,1);
y_test = m*A(2,1)+c;
if y_test<A(2,2)
%%%%%your statements %%%%%
else
%%%%%your statements%%%
end
0 Kommentare
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!