MATLAB Answers

0

Finding index location in volume?

Asked by Syed Abdul Salam on 16 Sep 2019
Latest activity Commented on by Syed Abdul Salam on 16 Sep 2019
For instance, I have
x = 2000:0.5:2004; y = 45000:0.3:45009; z = 10:0.2:12;
which are axes of a volume, x has length of 9, y has 31 and z has 11.
Now a volume filled of nan values and given by;
C = rand(9,31,11)*nan;
I want to fill this volume with values when new values come up, it will have x, y, z and the corresponding value. So, I need to find the closest index location and fill the value there. E.g.
x =2002.13, y = 45006.811, z = 11.36 have value of 10000 so i want to fill the corresponding C(x,y,z) = 10000;
here I need to find the index for x = 2002, y = 45006.9, z = 11.4 and fill the value 10000 there in C.
how can I use the values converted to closed index in the volume. Thanks

  0 Comments

Sign in to comment.

Products


Release

R2019a

2 Answers

Answer by Andrei Bobrov
on 16 Sep 2019
 Accepted Answer

x = 2000:0.5:2004;
y = 45000:0.3:45009;
z = 10:0.2:12;
x0 = 2002.13;
y0 = 45006.811;
z0 = 11.36;
C = nan(9,31,11);
C0 = 1000;
[~,ii] = min(abs(x - x0));
[~,jj] = min(abs(y - y0));
[~,k] = min(abs(z - z0));
C(ii,jj,k) = C0;

  1 Comment

work perfectly. Thanks

Sign in to comment.


Answer by Nicolas Broch on 16 Sep 2019

Hi,
for your case, I would write your code like that:
x = 2000:0.5:2004; y = 45000:0.3:45009; z = 10:0.2:12;
% no need to use rand() to generate a table of NaN and it's more flexible with automatic size
C = NaN(length(x), length(y), length(z));
% your points
pts = [2002.13, 45006.811, 11.36];
% your coordinates
[~, xc] = min(abs(x - pts(1)));
[~, yc] = min(abs(y - pts(2)));
[~, zc] = min(abs(z - pts(3)));
% your value
C(xc, yc, zc) = my_value;
Do it help you?

  1 Comment

Yes, thank you. Both works perfectly.

Sign in to comment.