304 views (last 30 days)

Show older comments

Jan
on 27 Aug 2013

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.

Jan
on 21 Sep 2013

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).

Shashank Prasanna
on 28 Aug 2013

Edited: 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)

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!