int get_distx2d( int ángulo, int distancia )


Retorna:

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

Descripción:

Devuelve distancia horizontal (en el eje de la coordenada x) 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 vertical, en lugar de la horizontal, es get_disty2d().


MAIN_PROGRAM_CDIV
PUBLIC
   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 horizontal 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_distx2d() equivale a calcular el coseno del ángulo y multiplicarlo por la distancia.


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