2011-09-05 9 views
6

En la imagen siguiente, verá en (1) un triángulo y un círculo. Dado un punto dedicado X en ese triángulo, quiero recortar todo lo que no es visible desde este punto. No hay problema con eliminar solo el círculo con un algoritmo de diferencia de polígono simple como en (2). Pero, ¿qué tipo de algoritmo puedo usar para obtener un polígono como en (3)?Recorte de polígono: solo área "visible"

El polígono es siempre simple.

Editar: El círculo es solo un ejemplo. Cada polígono simple debería ser posible.

Image #1

Puede crear una imagen mis necesidades por echar un vistazo a la imagen del juego "Comandos - Detrás de las líneas enemigas":

Image #2

+0

+1, Commandos. Excelente juego –

+0

Si no obtiene una respuesta, puede ofrecer una recompensa. –

+0

Su pregunta parece muy similar a http://stackoverflow.com/q/5892539/359538 –

Respuesta

3

Ésta es la idea básica.

Asumo un problema un poco más en general, pero será mucho más fácil para adaptarlo a su problema: dado un plan que contiene todas las formas, un punto y un conjunto de formas geométricas, queremos eliminar del plan el área no visible desde ese punto.

Lo que queremos hacer es obtener, para cada forma, starting_polar y ending_polar puntos, que son los 2 puntos con el ángulo polar mínimo y máximo que pertenece a la forma.

Ahora vamos a eliminar de la plan la forma y vamos a eliminar el quadrilateral formada por los puntos: starting_polar, ending_polar, y las intersecciones entre las 2 líneas rectas y (x, starting_polar)(x, ending_polar) y los límites de la plan.

En su caso, el plan será simplemente el triangle.

+0

Sonido prometedor Lo intentaré. – tur1ng

+0

funcionará con seguridad para formas convexas; pero creo que si una forma es cóncava y puedes dividirla en subsistemas convexos, esto seguirá funcionando repitiéndola para todas las formas secundarias de la forma – Simone

0

paralelo C a D, G paralelo a una , B paralelo a F, D es el diámetro.

Polygon

+0

Lo siento pero olvidé mencionar que el círculo es solo un ejemplo. Cada polígono simple debería ser posible. – tur1ng

+0

No, de todos modos la respuesta de Simone proporciona una mejor solución para cualquier caso :) – HRgiger

+0

Para cualquier caso en el que la forma en convexo ... si es cóncava, no siempre funciona perfectamente ... pero sospecho que si podemos subdividir cada forma cóncava en forma convexa, entonces el problema también se puede resolver para formas cóncavas – Simone

Cuestiones relacionadas