MATLAB Answers

I have two 3d points, A(1,0,0) and B(0,1,0). And I connect these two points as a line AB. How to divide this line into 10 equally segments and get their coordinates?

2 views (last 30 days)
Alan
Alan on 28 Nov 2020
Edited: Jan on 30 Nov 2020
Hello,
I have two 3d points, A(1,0,0) and B(0,1,0). And I connect these two points as a line AB. How to divide this line into 10 equally segments and get their coordinates?
Many thanks!

  0 Comments

Sign in to comment.

Accepted Answer

Ameer Hamza
Ameer Hamza on 28 Nov 2020
Edited: Ameer Hamza on 28 Nov 2020
This is one way
A = [1,0,0];
B = [0,1,0];
n = 10;
X = [A; B];
t = linspace(0, 1, n+1);
points = interp1([0 1], X, t)
Result
>> points
points =
1.0000 0 0
0.9000 0.1000 0
0.8000 0.2000 0
0.7000 0.3000 0
0.6000 0.4000 0
0.5000 0.5000 0
0.4000 0.6000 0
0.3000 0.7000 0
0.2000 0.8000 0
0.1000 0.9000 0
0 1.0000 0

More Answers (2)

M.Many
M.Many on 28 Nov 2020
Hi, you can use vectors to solve this problem
AB = [-1 1 0]' %vector AB
discretization = linspace(0,1,10) %10 values
vectors = AB*discretization %matrix multiplication
This gives the matrix whose columns are the vectors AP, to get the coords of the points P just add the coords of A to the columns of 'vectors'

  3 Comments

Alan
Alan on 28 Nov 2020
I am sorry I am not clear the last sentence you mentioned add the coordinates A. Do you mean vectors + A to get the corrdinates of all these equally divided points? thanks
M.Many
M.Many on 28 Nov 2020
Yes, you can do this if you add these lines at the end of the code
AB = [-1 1 0]' %vector AB
discretization = linspace(0,1,11) %11 values for 10 segments
vectors = AB*discretization %matrix multiplication
A = [1,0,0]'
P = A+vectors
The result is
P =
1.0000 0.9000 0.8000 0.7000 0.6000 0.5000 0.4000 0.3000 0.2000 0.1000 0
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000
0 0 0 0 0 0 0 0 0 0 0
Where each culumn is the coordinates of corresponding point P

Sign in to comment.


Jan
Jan on 28 Nov 2020
Edited: Jan on 30 Nov 2020
A = [1, 0, 0];
B = [0, 1, 0];
ab = B - A;
v = linspace(0, 1, 10).';
C = A + v .* ab % >= R2016b, auto-expanding
% For older versions:
C = A + bsxfun(@times, v, ab)

Community Treasure Hunt

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

Start Hunting!