void fget_angle3d( CPROCESS * id1, CPROCESS * id2, CDIV_3D_POINT * angulo3d )


Descripción:

Devuelve el ángulo 3D desde un proceso indicado por el identificador hasta el proceso cuyo código identificador se le pasa como parámetro.

Se recuerda que el ángulo se especifica en milésimas de grado. La función devuelve siempre un valor entre -180000 y 180000 (un ángulo entre -180 y 180 grados).

Ver formas de obtener el código identificador, para más información.


PROCESS( proceso_movil )
BEGIN
 ctype = c_3d_object; //Definimos como objeto 3D
 
 object3d = create_bitmap_3d( 1, 103 );
 
 LOOP
  FRAME;
END

MAIN_PROGRAM_CDIV
PRIVATE
 int coordenada_x, coordenada_z, resultado, fichero1;
 CPROCESS * movil;
 CDIV_3D_POINT pthis, pprcs;
 
BEGIN_PROGRAM

    set_gfx(GFX_AUTODETECT_WINDOWED);
    
    set_mode(m320x200);
    
    fichero1 = load_fpg("../help.fpg");
    y = -5; //Elevamos la cámara para que se pueda ver
    
    start_3d(0, fichero1, 100, 512, 512, 0, this);
    
    movil = new proceso_movil();
     
    write(0, 0, 0, 0, "Coordenadas proceso camara");
    write(0, 0, 10, 0, "X:");
    write_int(0, 20, 10, 0, &x);
    write(0, 0, 20, 0, "Z:");
    write_int(0, 20, 20, 0, &z);
    write(0, 0, 40, 0, "Coordenadas proceso movil");
    write(0, 0, 50, 0, "X:");
    write_int(0, 20, 50, 0, &movil->x);
    write(0, 0, 60, 0, "Z:");
    write_int(0, 20, 60, 0, &movil->z);
    write(0,  0, 80, 0, "Angulo Y de camara al proceso:");
    write_int(0,  0, 90, 0, &angle3d.y);
    write(0, 0, 200, 6, "Pulsa [ESPACIO] para hallar otros dos puntos.");

    LOOP{
        movil->x = rand(-256, 256);
        movil->z = rand(-256, 256);
        
        pthis.x = x; pthis.y = y; pthis.z = z;
        pprcs.x = movil->x; pprcs.y = movil->y; pprcs.z = movil->z;
        
        //Hallamos el ángulo entre los dos puntos
        fget_angle3d( pthis, pprcs, &angle3d);
        scan_code = 0;
        
        while (scan_code!=_space)
        {
            FRAME;
        }
    }
END_PROGRAM

En el ejemplo, después de poner los mensajes necesarios, se hallan las coordenadas x y z de dos puntos hallados al azar y se guardan en las variables destinadas para ello, calculando con la función fget_angle3d() el ángulo entre dichos puntos. Cada vez que se pulse la barra espaciadora se repetirá el proceso.

La función fget_angle3d() se utiliza para obtener el ángulo entre dos puntos, en lugar de entre dos procesos. Si el código identificador del proceso se tiene, por ejemplo, en una variable denominada id2, entonces
la llamada a la función:

 fget_angle3d(this, id2, &angulo3d)

Sería equivalente a:

 fget_angle3d( punto3d0, punto3d1, &angulo3d)

Obtener el ángulo desde las coordenadas (x, y, z) del proceso actual, hasta las coordenadas (x, y, z) del proceso cuyo código identificador es id2.

La función get_dist3d() se utiliza para obtener la distancia hasta otro proceso, en lugar del ángulo.


Ver: Uso de ángulos en el modo 3D - fget_angle3d() - get_dist3d()