How to determine what grid cell a given point is in?

26 vues (au cours des 30 derniers jours)
Darcy
Darcy le 16 Juil 2015
Commenté : Samson Williams le 30 Sep 2021
I apologize if this question has been asked before but I have looked and cannot find an answer.
Lets say I have a grid with x-vector [1:10] and y-vector [1:10]. And now I have the point (3.994, 7.554).
Is there an easy way to determine which grid cell this point lies in? I am currently solving the problem with for loops to find the nearest x- and y-line to the point. But I am sure there is an embedded function which addresses the problem.
Any help is appreciated. Cheers
  1 commentaire
Azzi Abdelmalek
Azzi Abdelmalek le 16 Juil 2015
What is the expected result for this case?

Connectez-vous pour commenter.

Réponse acceptée

Star Strider
Star Strider le 16 Juil 2015
One possibility:
x_vector = [1:10];
y_vector = [1:10];
point = [3.994, 7.554];
x_grid = find(x_vector <= point(1), 1, 'last');
y_grid = find(y_vector <= point(2), 1, 'last');
x_grid = [x_grid x_grid+1]
y_grid = [y_grid y_grid+1]
The output are the final values of ‘x_grid’ and ‘y_grid’
  4 commentaires
Mateus Mengatto
Mateus Mengatto le 9 Mar 2021
Perfect! Thanks
Star Strider
Star Strider le 9 Mar 2021
Mateus Mengatto — My pleasure!

Connectez-vous pour commenter.

Plus de réponses (2)

Azzi Abdelmalek
Azzi Abdelmalek le 16 Juil 2015
You can use
[xx,yy]=meshgrid(x,y)
  1 commentaire
Samson Williams
Samson Williams le 30 Sep 2021
Can you please elaborate on this answer? It is too vague to understand what you mean.

Connectez-vous pour commenter.


Walter Roberson
Walter Roberson le 16 Juil 2015
For values no smaller than 1:
[floor(x), floor(y)]
More generally,
[~, binx] = histc(x, [x_values(:); inf]);
[~, biny] = histc(y, [y_values(:); inf]);
this assumes that values might be greater than x_values(end) -- for example with x_values = 1:10 then this code assumes that 10.32403 might be a valid input. If that is not the case you need to decide whether x_values(end) exactly is a valid input and if so whether you want it to go into the bin that starts at x_values(end-1) -- e.g., should 10 exactly go into the same bin as [9,10) or should it go into a bin by itself. If you want it to go into the same bin as [9,10), making that bin [9,10] (inclusive on both sides), an asymmetry as all the other bins will be semi-open, then
[~, binx] = histc(x, [reshape(x_values(1:end-1),[],1); inf]);
Also this assumes that there are no values lower than x_values(1). If there are then do you want them discarded or do you want them placed in a bin by themselves, or do you want them in the same bin as the first defined range?

Catégories

En savoir plus sur MATLAB dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by