2010-01-18 10 views
6

Dada una unión de objetos convexos y un punto p dentro de esta unión, ¿cómo encontrar el punto más cercano en la superficie (cóncava) de la unión de p?punto más cercano en la superficie cóncava desde el punto

Por lo que vale, puedo encontrar fácilmente el punto más cercano en la superficie de un solo objeto convexo, es la unión de varios que me está dando problemas.

EDIT: Lo siento mucho, me refería a la unión de los objetos y no la intersección :(Disculpas a todos los que respondió

Edit2:. Aquí hay una pequeña imagen que describe la situación de cortesía AakashM , un es el punto más cercano en la superficie de a de O, b es el punto más cercano en la superficie de B de O y x es el punto que realmente estoy buscando (O == p).

alt text

Mis objetos no son objetos poligonales, pero las líneas de radio (creo que la cápsula término se utiliza a veces para esto, pero no sé si este término es universalmente aceptada).

+0

¿Con qué frecuencia plantea esta consulta (para un conjunto dado de objetos convexos)? ¿Valdrá la pena calcular primero la intersección de todos los polígonos convexos? Entonces solo debes calcular el punto más cercano con respecto al objeto de intersección. – Frank

+3

¿Cuántas dimensiones estamos hablando? Además, una ilustración podría ser útil. –

+0

@Frank Si solo trabajas con polígonos, es posible que tengas razón. Para objetos generales puede ser difícil calcular/almacenar la intersección. – MartinStettner

Respuesta

0

supongo que tendrá que calcular los puntos más cercanos en la superficie de todos los objetos individuales (n le da puntos), a continuación, comprobar para cada punto, si su interior todos los otros objetos (por lo que su parte de la superficie de la intersección ), y que encuentre la más cercana a p.

Este algoritmo utiliza el hecho, que un punto está en la superficie de las intersecciones de n objetos convexas, si es en la superficie de uno de estos objetos y dentro todos los demás objetos (la superficie de la intersección está hecho de pequeñas piezas de las superficies de los objetos intersectados ...)

+0

ezod tiene razón, no necesitas comprobar si el punto más cercano está dentro de los otros objetos, si p es garantizado que se encuentra en la intersección ... – MartinStettner

+0

Puede no ser correcto para objetos 3D: piense en un punto en el centro de una esfera grande A. Podría estar más cerca de otra esfera pequeña B contenida en A que en la superficie de A –

+0

@ Adam Matan: Pero la intersección de A y B sería presumiblemente B, y entonces no importa que el punto más cercano en A no esté en la intersección, porque el punto más cercano en B será, y desde ese punto uno estará más cerca en general, es el único en el que estamos interesados. – ezod

3

puede haber una manera más eficiente, pero el enfoque ingenuo sería simplemente encontrar el punto más cercano a p en cada superficie , luego selecciona el que tiene la distancia más pequeña. Dado que p se encuentra dentro de la intersección mutua de todos los objetos, se garantiza que este punto está en la superficie de intersección.

+0

¡buen punto! +1 ... – MartinStettner

+0

No creo que esto sea correcto. El punto deseado es * en la superficie de la intersección *, lo que significa que en mi diagrama en http://imgur.com/mKJhq.png no queremos apuntar a (el más cercano al objeto A), ni el punto b (el más cercano en el objeto B), pero el punto x. – AakashM

+0

@AakashM: Pero el punto x nunca puede ser el punto más cercano al punto O (o p, según la pregunta) a menos que también sea el punto más cercano en una de las superficies. :) – ezod

0

No conozco la herramienta y la estructura de datos en las que está trabajando, pero por ejemplo en matlab cuando intersecta n polígonos, el resultado es un nuevo polígono de intersección, y si puede encontrar fácilmente el punto más cercano en superficie de un solo objeto convexo; luego, si el polígono de intersección es cóncavo, puede triangular para obtener sus objetos convexos.

+0

Y, por supuesto, si los polígonos * n * fueran cóncavos, la intersección estaría * garantizada * como cóncava. A menos que Matlab tenga dificultades numéricas con la intersección. Pero no veo el punto acerca de la triangulación ... – MartinStettner

+0

porque dijo que puede encontrar fácilmente el punto más cercano en la superficie de una sola convexa, pero si la unión es cóncava podemos romperla en polígonos convexos mediante triangulación. –

0

(para la versión de Unión)

Cada punto de la unión cóncava está en la intersección de la frontera de dos de sus objetos.Así que puedes calcular todos los puntos de intersección, probar si están en el límite de tu unión y elegir el más cercano a p.

Usted necesita más que eso, sin embargo, como en la siguiente situación (unión de 2 rectángulos)

+--------------------+ 
|     | 
+--------------------+ 
|   p   | 
|     | 
|     | 
|     | 
|     | 
+--------------------+ 

El resultado deseado no es un punto de intersección de límites, y no es el punto más cercano p para cualquier rectángulo individualmente. No estoy seguro de cómo manejar ese caso.

Cuestiones relacionadas