4 votos

Encontrar el rectángulo más cercano a otro

¿Cómo podría encontrar las longitudes de las líneas resaltadas con otro color (con signos de interrogación) en la imagen de abajo? Conozco las coordenadas y el tamaño de estos rectángulos.

Mi objetivo es encontrar el rectángulo "más cercano" al verde, pero "más cercano" es una definición bastante abstracta, así que decidí que "más cercano" sería el que tuviera la línea más corta resaltada en la imagen de abajo. ¿Tal vez hay otras formas más sencillas de encontrar el rectángulo "más cercano"?

rectangles

2voto

p.s. Puntos 2897

¿Quieres un métrica en los rectángulos? Esto significa que $d(R_1,R_2)=0$ sólo si los rectángulos $R_1$ y $R_2$ son completamente idénticos (mismo tamaño y ubicación). También significa que se cumple la desigualdad del triángulo, $d(R_1,R_2) \le d(R_1,R_3) + d(R_2,R_3)$ . Si el rectángulo $R_i$ tiene esquinas $(x_i^1,y_i^1)$ y $(x_i^2,y_i^2)$ , donde $x_i^1<x_i^2$ y $y_i^1<y_i^2$ , entonces lo siguiente le daría una métrica para cualquier $p\ge1$ : $$ d_p(R_1,R_2) = \left( \sum_{j=1}^2 |x_1^j-x_2^j|^p + |y_1^j-y_2^j|^p \right)^{1/p} $$ Los casos $p=1,2$ puede ser útil. Además, el caso límite $p\rightarrow \infty$ es una métrica simple: $$ d_\infty(R_1,R_2) = \max(|x_1^1-x_2^1|,|y_1^1-y_2^1|,|x_1^2-x_2^2|,|y_1^2-y_2^2|) $$

En general, se puede obtener una métrica a partir de cualquier norma sobre un espacio de 4 dimensiones aplicada al vector de diferencias de coordenadas.

Además, si su preocupación es una algoritmo para encontrar rápidamente a los vecinos, eso es realmente una cuestión de programación, pero busca en los quadtrees.

1voto

Shabaz Puntos 403

Parece que estás pensando en la distancia entre los centros de los rectángulos. Si un rectángulo tiene esquinas opuestas $(a,b)$ y $(c,d)$ el centro es $(\frac{a+c}{2},\frac{b+d}{2})$ . Como dice Weltschmerz, basta con utilizar la fórmula pitagórica entre estos centros. Es fácil de calcular. Una alternativa es la Distancia de Hausdorff . Entre tu rectángulo verde y el rojo más grande, daría la distancia desde la esquina superior derecha del rojo hasta la esquina más cercana del verde. Es más difícil de calcular, pero podría ser más lo que quieres.

Añadido después del comentario: puedes calcular las longitudes de las naranjas si quieres, pero no cumplirán los requisitos habituales para una distancia. La distancia entre dos cuadrados que comparten una arista será cero, pero no son el mismo rectángulo. La desigualdad del triángulo también fallará. Si el rectángulo verde es A y el superior derecho es B, hay una cierta distancia entre ellos. Si ahora pongo un rectángulo C en medio que toca la parte superior de A y la inferior de B, la distancia de A a C es cero, la distancia de C a B es cero, pero la distancia de A a B es mayor que cero.

Para calcular las distancias de las naranjas, puedes encontrar la ecuación de la línea que pasa por los centros utilizando la forma de dos puntos . La línea que atraviesa $(a,b)$ y $(c,d)$ tiene la ecuación $y-b=\frac{d-b}{c-a}(x-a)$ , encuentra los puntos en los que choca con el borde de los rectángulos, y utiliza Pitágoras.

0voto

milhouse Puntos 21

No sé por qué nadie ha sugerido la simple distancia euclidiana entre 2 puntos del plano:

$D(p_1,p_2)=\sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}$

Una vez calculada esta distancia para cada línea resaltada, se puede determinar fácilmente la distancia mínima.

0voto

pedja Puntos 7773

Si conoces las coordenadas de los vértices de los rectángulos, puedes calcular los centros de los rectángulos. forma de dos puntos . Después de encontrar las ecuaciones de estas líneas, puedes calcular las coordenadas de los puntos de intersección $A,B,C,D,E,F$ resolviendo sistemas de dos ecuaciones con dos variables desconocidas.Para encontrar las distancias $\bar{AB} , \bar{CD} , \bar {EF} $ utilice fórmula de la distancia .

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X