Asked by Shivakumar
on 27 Aug 2013

I plot a line in MATLAB using the points. Please tell me how to obtain the normal of that line? Can I get these plots in a single plot?

Answer by Jan Simon
on 27 Aug 2013

Accepted answer

It is easier to answer, if you explain any details. At first I assume you mean 2D-lines, because for 3D-lines a normal line is not defined.

If you have a vector with the coordinates [x, y], the vectors [y, -x] and [-y, x] are orthogonal. When the line is defined by the coordinates of two points A and B, create the vector B-A at first, determine the orientation by the above simple formula, decide for one of the both vectors, and the midpoint between the points (A+B) * 0.5 might be a nice point to start from. Adjusting the length of the normal vector to either 1 or e.g. the distance `norm(B-A)` might be nice also.

Show 9 older comments

Jan Simon
on 20 Sep 2013

What does "A(x,y) and B(y,-x)" exactly mean? Using Matlab-Syntax is a common method in this forum.

Shivakumar
on 20 Sep 2013

@Jan Simon: My question is similar to the one you answered before. For the values I gave you already(A = [-0.6779,-0.7352]; B = [0.7352,-0.6779];), you helped me in finding normal to the line at the mid-point. Now, I am trying to find normal to the same line at the origin. Please help me. Thank you.

Jan Simon
on 21 Sep 2013

@Shivakumar: The normal of a line is a vector. Vectors can be move freely in the space, because they have a direction and a length. but no start point. Therefore the normal of the line at the midpoint **is** the normal at any other point also. If you want to *draw* the normal, it looks *nice*, when you start it at the midpoint of the line segment. but in a mathematical sense it is correct to start it from any other point of the X-Y-plane as well, e.g. at the origin.

Answer by Image Analyst
on 27 Aug 2013

A perpendicular line has a negative inverse slope. So if you used polyfit

coeffs = polyfit(x, y, 1);

then coeffs(1) is the slope. The new slope is -1/coeffs(1). Now you simply use the point-slope formula of a line to draw it. Obviously you need to know at least one point that that line goes through since there are an infinite number of lines at that slope (all parallel to each other of course).

Show 2 older comments

Shivakumar
on 29 Aug 2013

It is a part of my project work. I tried what you instructed before. I didn't understood how to take a point-slope formula to draw the line. So, I gave the values to you. But I thank you for the answer you provided and for the time you spent in giving me this help

Image Analyst
on 29 Aug 2013

You gave the two endpoints of the original line. Those do not have to be on the new, perpendicular line, though they could. Where do you want the perpendicular line to *cross/intersect* the first line? At the end? In the middle? Somewhere else?

Shivakumar
on 30 Aug 2013

I want the perpendicular line to cross in the middle. Thank you.

Answer by Shashank Prasanna
on 28 Aug 2013

Edited by Shashank Prasanna
on 28 Aug 2013

If this is a homework, please spend some time familiarizing yourself with basics of MATLAB. You can start by going through the Getting Started guide

There are several ways you could do this and all of the already suggested approaches are good. Here is how you can think about it in terms of linear algebra.

Answer: Normal lies in the null space of the the matrix A-B

A = [-0.6779, -0.7352]; B = [0.7352, -0.6779]; null(A-B)

Proof:

(A-B)*null(A-B) % Should yield a number close to zero

**If you are looking to plot:**

x = [A(1);B(1)]; y = [A(2);B(2)]; line(x,y,'color','k','LineWidth',2) normal = [mean(x),mean(y)] + null(A-B)'; line([mean(x),normal(1)],[mean(y),normal(2)],'color','r','LineWidth',2)

Shivakumar
on 29 Aug 2013

This is not my homework but It is a part of my project work. I thank you for the answer you provided.

Related Content

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

Learn moreOpportunities for recent engineering grads.

Apply Today
## 1 Comment

## tala (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/85686-how-to-calculate-normal-to-a-line#comment_395601

hi i have a 2D image of echocardiography. is there any solution to compute the normal vector of this image?