void fget_angle3d( CDIV_3D_POINT punto_inicial, CDIV_3D_POINT punto_final, CDIV_3D_POINT * angulo3d )


Descripción:

Devuelve el ángulo 3d que hay desde el punto inicial (x, y, z) hasta el punto final (x, y, z).

Se recuerda que el ángulo se especifica en grados. La función devuelve siempre en todo los ángulos un valor entre -180000 y 180000 (un ángulo entre -180 y 180 grados).


Ejemplo de utilización de fget_angle3d():
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.


Ver: Uso de ángulos en el modo 3D - get_angle3d() - fget_dist3d()