Entrar
¿Usuario nuevo? Regístrate
war_3d · War 3D
? ¿Ya estás suscrito? Entrar en Yahoo!

Consejos de Yahoo! Grupos

¿Sabías que...?
Puedes buscar mensajes antiguos en un grupo.

Mensajes

  Mensajes Ayuda
Avanzado
PARACODERS[02]   Lista de mensajes  
Responder | Reenviar Mensaje #434 de 894 |
PARACODERS[02]

Hola:

Gueno pos, esplico nuevamente de que va esto de PARACODERS :P para la gente nueva en la lista, ultimamente solo tenemos grafistas y modeladores nuevos. Pero gueno no importa.

En vista de que la participacion (de la gente que programa) aumenta un poquito cuando pongo algo de codigo en el mail list, voy a pegar algo de codigo de vez en cuando, o a pedir pequeñas funciones para el War3D, les daria los prototipo y una descripcion detallada de lo que debe hacer la funcion. O tambien fracmentos de codigo para optimizar. Este es el numero 2, el numero uno esta aca
http://es.groups.yahoo.com/group/war_3d/message/396 por si tienen curiosidad.

En esta ocacion vamos a pedir una funcion. Este es el prototipo:


void MascaraCircular (float radio, char *Mascara)
{
    // Reservar memoria para Mascara, [
(radio*2+1) *  (radio*2+1)]
    // Inicializar Mascara con 0s
    // Dibujar un circulo relleno de 1s en la Maya, de radio radio.
}



¿Que es lo que debe hacer la funcion? En principio crear una maya cuadrada de lados radio*2+1, linealizada, e inicializarla con ceros, luego hay que "dibujar" en la maya un circulo de unos de radio radio, relleno.

:P mejor pongo un ejemplo.


para Radio = 2;

Mascara = {0,0,1,0,0,
           0,1,1,1,0,
           1,1,1,1,1,
           0,1,1,1,0,
           0,0,1,0,0};

Esto es una Maya de (2*2+1) x (2*2+1), Sip ese Rombito de "1" es un circulo, se ve asi porque no se puede hacer un circulo esacto.



Otro ejemplo:


para Radio = 4;

Mascara = {0,0,0,1,1,1,0,0,0,
           0,0,
1,1,1,1,1,0,0,
           0,
1,1,1,1,1,1,1,0,
          
1,1,1,1,1,1,1,1,1,
           1,1,1,1,1,1,1,1,1,
           1,1,1,1,1,1,1,1,1,

           0,1,1,1,1,1,1,1,0,
           0,0,
1,1,1,1,1,0,0,
           0,0,0,
1,1,1,0,0,0}

Esta es una maya cuadrada de (4*2+1) x (4*2+1), esa cosa roja compuesta por unos es un circulo relleno de radio 4.



 


ammm ¿Lo he esplicado bien? :P Culquier pregunta envienla a: war_3d@yahoogroups.com

Hay algunos algoritmos para hacer circulos, por ejemplo esta el de Bresenham. (Buscar en google)

¿Y para que es esto? pasa que tenemo una maya (FogMaya) del tamaño del mapa, en la cual se marcan con 1s los lugares ya explorados, cuando un bicho camina sobre el mapa, va descubrinedo partes no esploradas del mapa, y hay que marcar ciculos en la FogMaya, el radio de los circulos depende de la distancia a la que puede ver el bicho. Es por eso que el parametro Radio es flotante.

Esto que estoy diciendo ya esta hecho en el war, pero no esta muy bien hecho :P, le pueden hechar un vistaso aqui: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/war3d/War3DSource/fogofwar.cpp?rev=1.11&content-type=text/vnd.viewcvs-markup


En la funcion FOGOFWAR::ilumina()

Amm ¿Que mas? ¿Algo se me olvida? Dudas pos al MailList, codigo al MailList tambien.

Aqui hay una programita para que prueben su funcion, espero que compile, porque no lo voy a probar :P

int main()
{
    char *Mayatona;
    float L = 2;
    int i, j;

    MascaraCircular (L, Mayatona);
   
    for (i=0 ; i <L*2+1 ; i++)
    {
      for (j=0 ; j <L*2+1 ; j++)
      {
        if (mask[j*(L*2+1)+i] == 1)
         {
           printf ("XX");
         }
         else
          {
            printf ("__");
          }
      }
      printf("\n");
    }

    delete Mayatona;

    return 1;
}


Deberia imprimir algo asi:


____XX____
__XXXXXX__
XXXXXXXXXX
__XXXXXX__
____XX____



Mas o menos
:), hablando de CODERS, aqui le pongo una imagen muy buena :), es de una tira comica que hace Jove, este es el numero 003  http://usuarios.lycos.es/jovechiere/heysoycoder/hey_soy_coder_0003.gif

La pagina de Jove es http://jovechiere.tk/

Saludos




ZeruGiran (EriC Ruiz Osornio)

E-Mail: zerugiran@...
MSN: eric@...
Tel: 04455-30876127 (Telcel)
Web:
www.Solar-OpenSource.org




Vie, 5 de Sep, 2003 3:37 am

zerugiran@...
Enviar mensaje Enviar mensaje

Reenviar Mensaje #434 de 894 |
Desplegar mensajes Autor Ordenar por fecha

PARACODERS[02] Hola: Gueno pos, esplico nuevamente de que va esto de PARACODERS :P para la gente nueva en la lista, ultimamente solo tenemos grafistas y ...
ZeruGiran (Eric Ruiz)
zerugiran@...
Enviar mensaje
4 de Sep, 2003
3:46 am

Para rasrules: Hola: Ya compile tu codigo, exelente : ) , todo va perfecto pero me encontre con un detalle. Queria hacer lo que faltaba, es decir rellenar el...
ZeruGiran (Eric Ruiz)
zerugiran@...
Enviar mensaje
8 de Sep, 2003
3:53 am

Hola, acá está la implementación en c de la fórmula matemática para un circulo ( X^2+Y^2<=r^2 ), la hice recien en un ratito libre que tube. Si les...
Agustín K-ballo Be...
kaballo86@...
Enviar mensaje
11 de Sep, 2003
1:55 pm

Si la haces en as pierdes toda la portabilidad y dudo mucho que hagas que funcione más rñapido q el codigo generado por el compilador. Por otra parte hay un...
javi
qualopec@...
Enviar mensaje
12 de Sep, 2003
5:19 am

Le he agregado un detalle para que los circulos sean más redondeados en las puntas, aunque debería ser relativo al radio la cantidad de 1s que agrega. Esto...
Agustín K-ballo Be...
kaballo86@...
Enviar mensaje
11 de Sep, 2003
5:51 pm
Avanzado

Copyright © 2009 Yahoo! Todos los derechos reservados.
Política de Privacidad Actualizada - Condiciones del servicio - Directrices - Ayuda