Ver Mensaje Individual
  #5 (permalink)  
Antiguo 05/01/2007, 21:36
Avatar de derkenuke
derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 4 meses
Puntos: 45
Re: Dibujar óptimamente (Librería gráfica óptima)

Sí, al final me salió un código mucho más complejo de lo que pensaba en un principio.

Es que el principal problema radica en dividir un triangulo cualquiera (el de la imagen posteada por ejemplo) en triángulos rectángulos, y sólo se me ocurrió esa idea de dividirlo a su vez con líneas horizontales y verticales. Quizás haya otra manera más optima o algún algoritmo.. pero si existe no he dado con ello.

Es complicado también identificar el punto intermedio, más de lo que parece. Quizás debería haber hecho funciones únicamente para ello.. así quedaría más legible. Son esos condicionales:
Código PHP:
        //hallamos el intermedio en X
            
if((minX==v1.&& maxX==v3.x) || (maxX==v1.&& minX==v3.x)) { var intermedioX=v2; var noIntermedioX=[v1,v3]; }
            else if((
minX==v2.&& maxX==v3.x) || (maxX==v2.&& minX==v3.x)) { var intermedioX=v1; var noIntermedioX=[v2,v3]; }
            else if((
minX==v1.&& maxX==v2.x) || (maxX==v1.&& minX==v2.x)) { var intermedioX=v3; var noIntermedioX=[v1,v2]; } 
De todas maneras si se mira con detenimiento la función rellenar no tiene más que cuatro cositas, y creo que me ha salido bastante fiable. Lo único es que creo que surgen anomalías cuando los puntos están casi alineados... pero de momento sirve.

Las demás funciones creo que son totalmente fiables y rápidas, no hay nada que temer


Los resultados en IE y en Firefox difieren un poco. En IE se ven algunos huecos. Voy a postear algunas imagenes con resultados:

Triángulos en Firefox:

Triángulos en IE: (ojo en la cercanía de los vértices, como aparecen las divisiones)

Un entorno 3D con su cielo y su iluminación en Firefox: (bastante bueno aunque se aprecia alguna diagonal)

El mismo entorno en IE (se ven muchas mas líneas que dividen a los triángulos)



He tenido que implementar la función cuadrilatero:
Código PHP:
function cuadrilatero(v1,v2,v3,v4,col) {
    
rellenar(v1,v2,v3,col);
    
rellenar(v3,v4,v1,col);

que es la solemne bobada de dividir un cuadrilatero en dos triángulos. Sé que no funciona en todos los cuadriláteros, habría que hacer comprobaciones para rellenar lo que hay que rellenar y no otra zona, pero bueno, de momento me ha servido.


Bueno espero que os guste. A mi me ha satisfecho bastante la perspectiva esa jeje. Una variable contador me dice que hay entre 70 y 90 triángulos rectángulos (divs) en esa captura (varía porque la sombra es aleatoria, puede salir más alta o más baja, se ve en las dos imágenes). Desde luego son muy pocos comparado con los cientos que necesitaríamos con un sólo triángulo si lo rellenasemos con horizontales.


Un saludo a todos, y gracias por responder caricatos
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.