Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Draw a line between two points

Asked by Artyom on 17 Jul 2013

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 Comments

Evan on 17 Jul 2013

Okay. You say you have three points, but your array seems to contain eight. Are you saying you only want to consider points where your y value is not zero? That is, you would plot a line through (1,5.2) and (5,9.9) then see if (9,12.1) is above or below the line?

I'll go ahead and submit a solution under this assumption. If I'm mistaken, just let me know any I'll modify it as needed.

Artyom on 17 Jul 2013

Actually I have an array like this:

[1 5.2
 2 4.3
 3 5.1
 4 7.8
 5 9.9
 ...];

I just want to show that we take only 2 points (1 and 5) and draw a line through them.

Evan on 17 Jul 2013

Ah, okay. I suppose you've been successful in modifying my below example code to be more in line with your needs?

Artyom

Tags

Products

No products are associated with this question.

4 Answers

Answer by Evan on 17 Jul 2013
Edited by Evan on 17 Jul 2013
Accepted answer
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 Comments

Evan
Answer by Iain on 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 Comments

Iain
Answer by Kiran Sagar on 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 Comments

Kiran Sagar
Answer by Artyom on 17 Jul 2013

Thank you guys.

0 Comments

Artyom

Contact us