int get_disty2d( int ángulo, int distancia )


Retorna:

 El desplazamiento vertical del vector (ángulo, distancia).

Descripción:

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

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


MAIN_PROGRAM_CDIV

PRIVATE
   int
    distancia,
    distancia_horizontal,
    distancia_vertical;

BEGIN_PROGRAM

    set_gfx(GFX_AUTODETECT_WINDOWED);
    set_mode(m320x200);

    load_fpg("../help.fpg");
    put_screen(1, 3);

    write(0, 160, 200, 7, "Utilice los cursores para mover triangulo.");
    write(0, 0, 0, 0, "DY:");
    write_int(0, 30, 0, 0, &distancia_vertical);
    write(0, 0, 10, 0, "DX:");
    write_int(0, 30, 10, 0, &distancia_horizontal);
    write(0, 0, 20, 0, "Angle:");
    write_int(0, 50, 20, 0, &angle);
    distancia=0;
    graph=101;

    while(1){
        if (key(_up)) distancia+=2;
        if (key(_down)) distancia-=2;
        if (key(_right)) angle-=2000;
        if (key(_left)) angle+=2000;

        // Calculamos la distancia vertical
        distancia_vertical = get_disty2d(angle, distancia);

        distancia_horizontal = get_distx2d(angle, distancia);
        x=160+distancia_horizontal;
        y=100+distancia_vertical;
        FRAME;
    }
END_PROGRAM

En el ejemplo se pone como fondo de la pantalla una gráfica circular, sobre la que se manejará con los cursores un triángulo, modificando su distancia y ángulo al centro de la gráfica.

El programa calcula la distancia horizontal y vertical para emplazar el triángulo a partir de las coordenadas del centro de pantalla (160, 100), mostrándose en todo momento la distancia vertical en la esquina superior izquierda.

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

 x+=get_distx2d(ángulo, distancia);
 y+=get_disty2d(ángulo, distancia);

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

 xadvance2d(ángulo, distancia);

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

 advance2d(distancia);

La función get_disty2d() equivale a calcular el seno del ángulo y multiplicarlo por la distancia, cambiando este resultado de signo, debido a que el eje Y de pantalla avanza hacia abajo (de manera contraria a la función seno).


Ver: Uso de ángulos en el lenguaje - get_distx2d() - xadvance2d() - advance2d()