Select next discrete cell by vector direction
2 次查看(过去 30 天)
显示 更早的评论
The situation is: I have my space discretized on cells (dimension doesn't matter) so that I'm at any cell and I know the wind flow 3 dimensional vector in that point.
What I would like to do is move to the most convenient cell next, depending on the wind vector direction.
Clarifications:
- From each center cell, I can move in the 26 directions (taking into account diagonals) (I have painted some of them in the picture below).

- I have cells classified by numbers (like in the image)

So, for example, if my wind vector is (400,0,0) I would have to move in the x axis positive direction to the '22' cell. But if my wind vector is (100,100,100) I would have to move in the positive diagonal (x,y,z) to the '26' cell (see image).

It gets more complicated when the vector is not so evident, for example (100,10,0). In this case the most convenient cell is number 22 too, because it is the closest.
0 个评论
采纳的回答
Daniel M
2019-10-3
编辑:Daniel M
2019-10-3
You have the distance to each cell as the following:
[x,y,z] = ndgrid(-1:1);
R = [z(:),y(:),x(:)];
R(14,:) = []; % since you do not consider the center cell (0,0,0)
C = 1:26; % this coordinates with the (x,y,z) position in R
Now you need to get a normalized wind vector:
wind = [100,10,0];
nwind = normalize(wind,'norm');
Then finally, find the minimum euclidean distance between nwind and R. There are several ways to do this, here is one:
edist = sqrt(sum((nwind-R).^2,2));
[~,ind] = min(edist);
nextCell = C(ind); % the next cell to move to
And the output is:
nextCell =
22
3 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Inertias and Loads 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!