Author Topic: Dibujar un poligono en java  (Read 3423 times)

Leunamal

  • Full Member
  • ***
  • Posts: 121
  • Karma: 0
    • View Profile
Dibujar un poligono en java
« on: Octubre 07, 2008, 11:06:48 am »
Hola, ¿alguien sabe como dibujar un poligono de manera que el area delimitada por todos sus puntos quedan completamente rellenada?

Yo utilizo esto:

polygon.addPoint(x,y);

Para añadir puntos. Sin embargo, llega un monento que me ocurre esto:



Como veis hay partes que esta en blanco. Cambiando el orden seguro que se podra ver entero lleno al 100%. pero como los puntos son resultados de unos calculos, estaran desordenados.

¿Alguien sabe como se soluciona esto?

Un saludo


chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 4961
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Dibujar un poligono en java
« Reply #1 on: Octubre 07, 2008, 11:17:42 am »
Hola:

Pues creo que no queda más remedio que ordenar los puntos.

Se bueno.

Leunamal

  • Full Member
  • ***
  • Posts: 121
  • Karma: 0
    • View Profile
Re: Dibujar un poligono en java
« Reply #2 on: Octubre 07, 2008, 06:22:15 pm »
Buenas.

Pff, otro aspecto que debería mejorar java. Deberían rellenarse por las lineas que delimitan. 

Seguiré buscando, a ver si encuentro con la solución. A lo mejor hay otra forma que no sea exactamente un polígono. Porque para la ordenación no sé en que basarme. No sé si tendría que meter primero los números de la coordenada x, más cercana al origen o al reves. Ni idea.

Saludos.


Willie

  • Newbie
  • *
  • Posts: 24
  • Karma: 0
    • View Profile
Re: Dibujar un poligono en java
« Reply #3 on: Octubre 08, 2008, 04:16:22 pm »
Asumo que quieres un poligono convexo. Para ordenar los puntos, primero calculas el punto medio del poligono, dado por (media(coordenadas x de los puntos), media(coordenadas y de los puntos), y luego calculas los angulos de cada punto con respecto al punto medio. Los angulos te dan el orden.


Leunamal

  • Full Member
  • ***
  • Posts: 121
  • Karma: 0
    • View Profile
Re: Dibujar un poligono en java
« Reply #4 on: Octubre 08, 2008, 04:31:19 pm »
Asumo que quieres un poligono convexo. Para ordenar los puntos, primero calculas el punto medio del poligono, dado por (media(coordenadas x de los puntos), media(coordenadas y de los puntos), y luego calculas los angulos de cada punto con respecto al punto medio. Los angulos te dan el orden.

Hola Willie, gracias por responder.

Tiene muy buena pinta lo que comentas. ¿Existe alguna pagina donde aparezca un ejemplo de esto para facilitar las cosas.

Un saludo

Willie

  • Newbie
  • *
  • Posts: 24
  • Karma: 0
    • View Profile
Re: Dibujar un poligono en java
« Reply #5 on: Octubre 10, 2008, 09:03:24 am »
no tengo codigo de ejemplo, pero no es muy complicado; solo necesitas un poco de trigonometria

Leunamal

  • Full Member
  • ***
  • Posts: 121
  • Karma: 0
    • View Profile
Re: Dibujar un poligono en java
« Reply #6 on: Octubre 10, 2008, 09:31:10 am »
no tengo codigo de ejemplo, pero no es muy complicado; solo necesitas un poco de trigonometria

Calcular el centro geométrico quizas sea fácil, pero el problema está en que no se tiene el polígono, sino los puntos. Existe el problema que se unan puntos que no deban. Luego otro problema, una vez calculado el centro geométrico de la figura, hay que calcular los ángulos.

Ayer estuve probando, uniendo todos los puntos.  Me explico, recurria cada punto, y los unia cada uno con el resto. de manera que hacia esto:

pto 1 : (0,0) pto 2: (1,0)
pto 1: (0,0) pto 2 : (2,3)

etc...

Pero me di cuenta que si volvia a poner los puntos, estos desaparecían.

Buscando en foros oficiales de java me encontré con algo que podría ser la solución. Me creo varios objetos de la clase GeneralPath, donde voy dibujando y rellenado caminos, de manera que cada objeto será un trozo de la figura. El poligono final, sería la union de los trozos (utilizando el método: append(objeto, false)).

A ver si hoy consigo acabar esta parte.

Un saludo

EDITO

Solucionado!! Al final con generalpath por fin conseguí dibujar poligonos con rellenos al 100%. Me ha salido la función de orden cuadrático, pero seguro que es más eficiente que la que saldría al calcular el centro geometrico y luego calcular los grados, y demas.

Lo que he hecho es lo que comente, con un bucle for, recorro cada punto del poligono, y dentro de ese for recorro con otro el resto de los puntos, de manera que tras terminar de recorrer el resto de los puntos dibujo el poligono temporal. Al final, como he dibujado todos los posibles poligonos obtengo la figura deseada ^^.

Un saludo
« Last Edit: Octubre 10, 2008, 11:44:28 am by Leunamal »