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

23 visualizaciones (últimos 30 días)
Darcy
Darcy el 16 de Jul. de 2015
Comentada: Samson Williams el 30 de Sept. de 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

Respuesta aceptada

Star Strider
Star Strider el 16 de Jul. de 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 comentarios
Mateus Mengatto
Mateus Mengatto el 9 de Mzo. de 2021
Perfect! Thanks
Star Strider
Star Strider el 9 de Mzo. de 2021
Mateus Mengatto — My pleasure!

Iniciar sesión para comentar.

Más respuestas (2)

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

Iniciar sesión para comentar.


Walter Roberson
Walter Roberson el 16 de Jul. de 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?

Categorías

Más información sobre MATLAB en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by