int get_distz3d( CDIV_3D_POINT ángulo3D, int distancia )


Retorna:

 El desplazamiento de fondo del vector (ángulo, distancia).

Descripción:

Devuelve distancia de fondo (en el eje de la coordenada z) a partir del ángulo y distancia (sobre ese ángulo) pasados como parámetros. Es decir, devuelve la distancia que recorre en horizontal el vector formado por el ángulo y longitud (distancia o módulo del vector) indicados.

Se recuerda que el ángulo se especifica en milésimas de grado y como distancia se puede especificar cualquier expresión numérica válida.

La función utilizada para calcular la distancia horizontal, en lugar de la de fondo, es get_distx3d().


MAIN_PROGRAM_CDIV

PRIVATE
    int resultado, fichero1;

BEGIN_PROGRAM

    set_gfx(GFX_AUTODETECT_WINDOWED);
    set_mode(m320x200);

    fichero1=load_fpg("../help.fpg");

    y = -5;

    start_3d(0, fichero1, 100, 512, 512, 0, this);

    write(0, 0, 40, 0, "Ángulo X calculado:");
    write_int(0, 20, 50, 0, &angle3d.x);

    write(0, 0, 80, 0, "Distancia en Z:");
    write_int(0, 0, 90, 0, &resultado);
    write(0, 0, 200, 6, "Pulsa [ESPACIO] para hallar otro ángulo.");

    LOOP{
        angle3d.x = rand(0, 360000);

        //Hallamos la distancia
        resultado = get_distz3d(angle3d, 10);

        scan_code=0;
        while (scan_code!=_space)
            FRAME;
    }
END_PROGRAM


En el ejemplo, después de poner los mensajes necesarios, se halla el ángulo al azar y se guardan en las variables destinadas para ello, calculando con la función get_distz3d() la distancia Z. Cada vez que se pulse la barra espaciadora se repetirá el proceso.

Si se quiere avanzar las coordenadas del proceso una distancia en un ángulo determinado, se pueden utilizar las siguientes sentencias:

 x+=get_distx3d(ángulo3d, distancia);
 y+=get_disty3d(ángulo3d, distancia);
 z+=get_distz3d(ángulo3d, distancia);

Esto sería equivalente a la siguiente sentencia (utilizando la función xadvance3d()).

 xadvance3d(ángulo3d, distancia);

Si el ángulo en el que se quiere mover el proceso es el que tiene en su variable local angle3d, entonces esta misma operación se podría realizar con la función advance3d() de la siguiente forma:

 advance3d(distancia);

Ver: Uso de ángulos en el modo 3D - get_distx3d() - get_disty3d() - xadvance3d() - advance3d()