ElTicus.com

Programación, lenguajes y recursos para programadores

Código fuente
Programa en C para MS-DOS que muestra en modo gráfico un brazo robótico en 3D.
Interesante e impresionante
Publicado por jl Fecha: 2007-09-21 17:23:47 Idioma: Español Tipo de documento: Código fuente

Programa en C para MS-DOS que muestra en modo gráfico un brazo robótico en 3D.

Un código bastante interesante basado en manejo de vectores 3D representados en 2D. Simula un brazo robot y se controla por el teclado.

El sistema está completo en este pequeño código fuente, no requiere de ningún módulo o librería extra para controlar la tercera dimensión.

Son puros vectores y matemáticas simples aplicadas. La base de todo el programa el la fórmula para rotar un punto en el espacio cartesiano. Muy simple. aparentemente.

Si quieres ver el ejecutable primero, bájatelo de AQUÍ.

Está libre de virus según mi Antivirus y no es ningún Spyware, ya que yo mismo lo compilé desde el fuente.

Como funciona


en el código verán una serie de líneas como la siguiente:
 Xa[1]=0; Ya[1]=0; Za[1]=0; Xa2[1]=10; Ya2[1]=30; Za2[1]=10;

que representan una línea en el espacio tridimensional, XYZ inicial y XYZ final. Todo lo demas son transformaciones de rotacion y desplazamiento.

Está muy Profusamente comentado, pero en realidad no está tan dificil, a ver si mas adelante me dedico a organizarlo o si alguien me hace el favor, mandelo al correo de root de ElTicus para que lo actualicen.


Para controlar el movimiento del brazo, utiliza las siguientes teclas:
w y s Para mover la base
e y d Para mover el codo
r y f Para mover la muñeca
t y g Para mover la pinza
u y j Para mover todas las coyunturas a la vez
i y k Movimiento proporcional
Q y A (mayúsculas) Giro en Tercera Dimensión

Código fuente completo

#include <conio.h>
#include <stdio.h>
#include <graphics.h>
#include <stdlib.h>
#include <math.h>

int i;

void IniciaGraficos()
{
 int gdriver = DETECT, gmode, errorcode;
 initgraph(&gdriver, &gmode, "");
 errorcode = graphresult();
 if (errorcode != grOk)  /* an error occurred */
 {
  printf("Graphics error: %s\n", grapherrormsg(errorcode));
  printf("Press any key to halt:");
  getch();
  exit(1);             /* return with error code */
 }
}


const Ang=1.0,Escala=2.5;


void PintaLinea3d(float X1,float Y1,float Z1,float X2,float Y2,float Z2)
{
 float Xp1,Yp1,Xp2,Yp2;
 Xp1=X1;
 Yp1=Y1;
 Xp2=X2;
 Yp2=Y2;
 line(620/2+Xp1,400-Yp1,620/2+Xp2,400-Yp2);
}


void GiraXY(int x,int y,float*Ox,float*Oy,int n,float Grados)
{
 float nx,ny;
 for(i=1;i<=n;i++)
 {
  nx=x+(Ox[ i ]-x)*cos(Grados)-(Oy[ i ]-y)*sin(Grados);
  ny=y+(Ox[ i ]-x)*sin(Grados)+(Oy[ i ]-y)*cos(Grados);
  Ox[ i ]=nx; Oy[ i ]=ny;
 }
}


void DespliegaOBJETO(float*Ox,float*Oy,float*Oz,float*Oxi,float*Oyi,float*Ozi,int n)
{
 for(i=1;i<=n;i++)
 {
  PintaLinea3d(Ox[ i ]*Escala,Oy[ i ]*Escala,Oz[ i ]*Escala,
               Oxi[ i ]*Escala,Oyi[ i ]*Escala,Ozi[ i ]*Escala);
 }
}


void CopiaAtemporal(float*x,float*y,float*z,float*xi,float*yi,float*zi,
                    float*xt,float*yt,float*zt,float*xti,float*yti,float*zti,int n)
{
 for(i=1;i<=n;i++)
 {
  xt[ i ]=x[ i ];
  yt[ i ]=y[ i ];
  zt[ i ]=z[ i ];
  xti[ i ]=xi[ i ];
  yti[ i ]=yi[ i ];
  zti[ i ]=zi[ i ];
 }
}

float Xa[20],Ya[20],Za[20],Xa2[20],Ya2[20],Za2[20];
float Xb[20],Yb[20],Zb[20],Xb2[20],Yb2[20],Zb2[20];
float Xc[20],Yc[20],Zc[20],Xc2[20],Yc2[20],Zc2[20];
float Xd[20],Yd[20],Zd[20],Xd2[20],Yd2[20],Zd2[20];
float Xe1[20],Ye1[20],Ze1[20],Xe12[20],Ye12[20],Ze12[20];
float Xe2[20],Ye2[20],Ze2[20],Xe22[20],Ye22[20],Ze22[20];

float Xta[20],Yta[20],Zta[20],Xta2[20],Yta2[20],Zta2[20];
float Xtb[20],Ytb[20],Ztb[20],Xtb2[20],Ytb2[20],Ztb2[20];
float Xtc[20],Ytc[20],Ztc[20],Xtc2[20],Ytc2[20],Ztc2[20];
float Xtd[20],Ytd[20],Ztd[20],Xtd2[20],Ytd2[20],Ztd2[20];
float Xte1[20],Yte1[20],Zte1[20],Xte12[20],Yte12[20],Zte12[20];
float Xte2[20],Yte2[20],Zte2[20],Xte22[20],Yte22[20],Zte22[20];

float Xtta[20],Ytta[20],Ztta[20],Xtta2[20],Ytta2[20],Ztta2[20];
float Xttb[20],Yttb[20],Zttb[20],Xttb2[20],Yttb2[20],Zttb2[20];
float Xttc[20],Yttc[20],Zttc[20],Xttc2[20],Yttc2[20],Zttc2[20];
float Xttd[20],Yttd[20],Zttd[20],Xttd2[20],Yttd2[20],Zttd2[20];
float Xtte1[20],Ytte1[20],Ztte1[20],Xtte12[20],Ytte12[20],Ztte12[20];
float Xtte2[20],Ytte2[20],Ztte2[20],Xtte22[20],Ytte22[20],Ztte22[20];

float Lx1[20],Ly1[20],Lz1[20],Lx2[20],Ly2[20],Lz2[20];
float AnguloA,AnguloB,AnguloC,AnguloD,AnguloE;

int mA,mB,mC,mD,mE;

char ch;

void main()
{ 
 Xa[1]=0; Ya[1]=0; Za[1]=0; Xa2[1]=10; Ya2[1]=30;Za2[1]=10;
 Xa[2]=10;Ya[2]=30;Za[2]=10; Xa2[2]=30;Ya2[2]=30;Za2[2]=10;
 Xa[3]=30;Ya[3]=30;Za[3]=10; Xa2[3]=40;Ya2[3]=0; Za2[3]=0;
 Xa[4]=40;Ya[4]=0; Za[4]=0; Xa2[4]=0; Ya2[4]=0; Za2[4]=0;

 Xa[5]=0; Ya[5]=0; Za[5]=40; Xa2[5]=10;Ya2[5]=30;Za2[5]=30;
 Xa[6]=10;Ya[6]=30;Za[6]=30; Xa2[6]=30;Ya2[6]=30;Za2[6]=30;
 Xa[7]=30;Ya[7]=30;Za[7]=30; Xa2[7]=40;Ya2[7]=0; Za2[7]=40;
 Xa[8]=40;Ya[8]=0; Za[8]=40; Xa2[8]=0; Ya2[8]=0; Za2[8]=40;

 Xa[9]=0;  Ya[9]=0;  Za[9]=0;  Xa2[9]=0;  Ya2[9]=0;  Za2[9]=40;
 Xa[10]=10;Ya[10]=30;Za[10]=10;Xa2[10]=10;Ya2[10]=30;Za2[10]=30;
 Xa[11]=30;Ya[11]=30;Za[11]=10;Xa2[11]=30;Ya2[11]=30;Za2[11]=30;
 Xa[12]=40;Ya[12]=0; Za[12]=0; Xa2[12]=40;Ya2[12]=0; Za2[12]=40;

 Xb[1]=10;Yb[1]=30;Zb[1]=10; Xb2[1]=10; Yb2[1]=80;Zb2[1]=10;
 Xb[2]=10;Yb[2]=80;Zb[2]=10; Xb2[2]=30;Yb2[2]=80;Zb2[2]=10;
 Xb[3]=30;Yb[3]=80;Zb[3]=10; Xb2[3]=30;Yb2[3]=30;Zb2[3]=10;
 Xb[4]=30;Yb[4]=30;Zb[4]=10; Xb2[4]=10; Yb2[4]=30;Zb2[4]=10;

 Xb[5]=10;Yb[5]=30;Zb[5]=30; Xb2[5]=10; Yb2[5]=80;Zb2[5]=30;
 Xb[6]=10;Yb[6]=80;Zb[6]=30; Xb2[6]=30;Yb2[6]=80;Zb2[6]=30;
 Xb[7]=30;Yb[7]=80;Zb[7]=30; Xb2[7]=30;Yb2[7]=30;Zb2[7]=30;
 Xb[8]=30;Yb[8]=30;Zb[8]=30; Xb2[8]=10; Yb2[8]=30;Zb2[8]=30;

 Xb[9]=10; Yb[9]=30; Zb[9]=10;  Xb2[9]=10; Yb2[9]=30; Zb2[9]=30;
 Xb[10]=10;Yb[10]=80;Zb[10]=10; Xb2[10]=10;Yb2[10]=80;Zb2[10]=30;
 Xb[11]=30;Yb[11]=80;Zb[11]=10; Xb2[11]=30;Yb2[11]=80;Zb2[11]=30;
 Xb[12]=30;Yb[12]=30;Zb[12]=10; Xb2[12]=30;Yb2[12]=30;Zb2[12]=30;


 Xc[1]=10;Yc[1]=80;Zc[1]=10; Xc2[1]=10; Yc2[1]=140;Zc2[1]=10;
 Xc[2]=10;Yc[2]=140;Zc[2]=10; Xc2[2]=30;Yc2[2]=140;Zc2[2]=10;
 Xc[3]=30;Yc[3]=140;Zc[3]=10; Xc2[3]=30;Yc2[3]=80;Zc2[3]=10;
 Xc[4]=30;Yc[4]=80;Zc[4]=10; Xc2[4]=10; Yc2[4]=80;Zc2[4]=10;

 Xc[5]=10;Yc[5]=80;Zc[5]=30; Xc2[5]=10; Yc2[5]=140;Zc2[5]=30;
 Xc[6]=10;Yc[6]=140;Zc[6]=30; Xc2[6]=30;Yc2[6]=140;Zc2[6]=30;
 Xc[7]=30;Yc[7]=140;Zc[7]=30; Xc2[7]=30;Yc2[7]=80;Zc2[7]=30;
 Xc[8]=30;Yc[8]=80;Zc[8]=30; Xc2[8]=10; Yc2[8]=80;Zc2[8]=30;

 Xc[9]=10; Yc[9]=80; Zc[9]=10;  Xc2[9]=10;  Yc2[9]=80; Zc2[9]=30;
 Xc[10]=10;Yc[10]=140;Zc[10]=10; Xc2[10]=10; Yc2[10]=140;Zc2[10]=30;
 Xc[11]=30;Yc[11]=140;Zc[11]=10; Xc2[11]=30;Yc2[11]=140;Zc2[11]=30;
 Xc[12]=30;Yc[12]=80;Zc[12]=10; Xc2[12]=30;Yc2[12]=80;Zc2[12]=30;

 Xd[1]=10;Yd[1]=140;Zd[1]=10; Xd2[1]=10; Yd2[1]=150;Zd2[1]=10;
 Xd[2]=10;Yd[2]=150;Zd[2]=10; Xd2[2]=30;Yd2[2]=150;Zd2[2]=10;
 Xd[3]=30;Yd[3]=150;Zd[3]=10; Xd2[3]=30;Yd2[3]=140;Zd2[3]=10;
 Xd[4]=30;Yd[4]=140;Zd[4]=10; Xd2[4]=10; Yd2[4]=140;Zd2[4]=10;

 Xd[5]=10;Yd[5]=140;Zd[5]=30; Xd2[5]=10; Yd2[5]=150;Zd2[5]=30;
 Xd[6]=10;Yd[6]=150;Zd[6]=30; Xd2[6]=30;Yd2[6]=150;Zd2[6]=30;
 Xd[7]=30;Yd[7]=150;Zd[7]=30; Xd2[7]=30;Yd2[7]=140;Zd2[7]=30;
 Xd[8]=30;Yd[8]=140;Zd[8]=30; Xd2[8]=10; Yd2[8]=140;Zd2[8]=30;

 Xd[9]=10; Yd[9]=140; Zd[9]=10;  Xd2[9]=10;  Yd2[9]=140; Zd2[9]=30;
 Xd[10]=10;Yd[10]=150;Zd[10]=10; Xd2[10]=10; Yd2[10]=150;Zd2[10]=30;
 Xd[11]=30;Yd[11]=150;Zd[11]=10; Xd2[11]=30;Yd2[11]=150;Zd2[11]=30;
 Xd[12]=30;Yd[12]=140;Zd[12]=10; Xd2[12]=30;Yd2[12]=140;Zd2[12]=30;


 Xe1[1]=10;Ye1[1]=150;Ze1[1]=10; Xe12[1]=10; Ye12[1]=190;Ze12[1]=10;
 Xe1[2]=10;Ye1[2]=190;Ze1[2]=10; Xe12[2]=20;Ye12[2]=190;Ze12[2]=10;
 Xe1[3]=15;Ye1[3]=185;Ze1[3]=10; Xe12[3]=15;Ye12[3]=150;Ze12[3]=10;
 Xe1[4]=15;Ye1[4]=150;Ze1[4]=10; Xe12[4]=10; Ye12[4]=150;Ze12[4]=10;

 Xe1[5]=10;Ye1[5]=150;Ze1[5]=30; Xe12[5]=10; Ye12[5]=190;Ze12[5]=30;
 Xe1[6]=10;Ye1[6]=190;Ze1[6]=30; Xe12[6]=20;Ye12[6]=190;Ze12[6]=30;
 Xe1[7]=15;Ye1[7]=185;Ze1[7]=30; Xe12[7]=15;Ye12[7]=150;Ze12[7]=30;
 Xe1[8]=15;Ye1[8]=150;Ze1[8]=30; Xe12[8]=10; Ye12[8]=150;Ze12[8]=30;

 Xe1[9]=10; Ye1[9]=150; Ze1[9]=10;  Xe12[9]=10;  Ye12[9]=150; Ze12[9]=30;
 Xe1[10]=10;Ye1[10]=190;Ze1[10]=10; Xe12[10]=10; Ye12[10]=190;Ze12[10]=30;
 Xe1[11]=20;Ye1[11]=190;Ze1[11]=10; Xe12[11]=20;Ye12[11]=190;Ze12[11]=30;
 Xe1[12]=15;Ye1[12]=150;Ze1[12]=10; Xe12[12]=15;Ye12[12]=150;Ze12[12]=30;

 Xe1[13]=15;Ye1[13]=185;Ze1[13]=10; Xe12[13]=20;Ye12[13]=190;Ze12[13]=10;
 Xe1[14]=15;Ye1[14]=185;Ze1[14]=30; Xe12[14]=20;Ye12[14]=190;Ze12[14]=30;
 Xe1[15]=15;Ye1[15]=185;Ze1[15]=30; Xe12[15]=15;Ye12[15]=185;Ze12[15]=10;


 Xe2[1]=25;Ye2[1]=150;Ze2[1]=10; Xe22[1]=25;Ye22[1]=185;Ze22[1]=10;
 Xe2[2]=20;Ye2[2]=190;Ze2[2]=10; Xe22[2]=30;Ye22[2]=190;Ze22[2]=10;
 Xe2[3]=30;Ye2[3]=190;Ze2[3]=10; Xe22[3]=30;Ye22[3]=150;Ze22[3]=10;
 Xe2[4]=30;Ye2[4]=150;Ze2[4]=10; Xe22[4]=25;Ye22[4]=150;Ze22[4]=10;

 Xe2[5]=25;Ye2[5]=150;Ze2[5]=30; Xe22[5]=25;Ye22[5]=185;Ze22[5]=30;
 Xe2[6]=20;Ye2[6]=190;Ze2[6]=30; Xe22[6]=30;Ye22[6]=190;Ze22[6]=30;
 Xe2[7]=30;Ye2[7]=190;Ze2[7]=30; Xe22[7]=30;Ye22[7]=150;Ze22[7]=30;
 Xe2[8]=30;Ye2[8]=150;Ze2[8]=30; Xe22[8]=25;Ye22[8]=150;Ze22[8]=30;

 Xe2[9]=25; Ye2[9]=150; Ze2[9]=10;  Xe22[9]=25;  Ye22[9]=150; Ze22[9]=30;
 Xe2[10]=20;Ye2[10]=190;Ze2[10]=10; Xe22[10]=20; Ye22[10]=190;Ze22[10]=30;
 Xe2[11]=30;Ye2[11]=190;Ze2[11]=10; Xe22[11]=30;Ye22[11]=190;Ze22[11]=30;
 Xe2[12]=30;Ye2[12]=150;Ze2[12]=10; Xe22[12]=30;Ye22[12]=150;Ze22[12]=30;

 Xe2[13]=25;Ye2[13]=185;Ze2[13]=10; Xe22[13]=25;Ye22[13]=185;Ze22[13]=30;
 Xe2[14]=25;Ye2[14]=185;Ze2[14]=10; Xe22[14]=20;Ye22[14]=190;Ze22[14]=10;
 Xe2[15]=25;Ye2[15]=185;Ze2[15]=30; Xe22[15]=20;Ye22[15]=190;Ze22[15]=30;

 IniciaGraficos();
  setbkcolor(1);

  AnguloA=0.0;
  AnguloB=0.0;
  AnguloC=0.0;
  AnguloD=0.0;
  AnguloE=0.0;

  CopiaAtemporal(Xa,Ya,Za,Xa2,Ya2,Za2, Xta,Yta,Zta,Xta2,Yta2,Zta2,12);
  CopiaAtemporal(Xb,Yb,Zb,Xb2,Yb2,Zb2, Xtb,Ytb,Ztb,Xtb2,Ytb2,Ztb2,12);
  CopiaAtemporal(Xc,Yc,Zc,Xc2,Yc2,Zc2, Xtc,Ytc,Ztc,Xtc2,Ytc2,Ztc2,12);
  CopiaAtemporal(Xd,Yd,Zd,Xd2,Yd2,Zd2, Xtd,Ytd,Ztd,Xtd2,Ytd2,Ztd2,12);
  CopiaAtemporal(Xe1,Ye1,Ze1,Xe12,Ye12,Ze12, Xte1,Yte1,Zte1,Xte12,Yte12,Zte12,15);
  CopiaAtemporal(Xe2,Ye2,Ze2,Xe22,Ye22,Ze22, Xte2,Yte2,Zte2,Xte22,Yte22,Zte22,15);

  mA=1;

 do{


  Lx1[1]=Xtb[4];Ly1[1]=Ytb[4];Lz1[1]=Ztb[4];
  Lx2[1]=Xta[11];Ly2[1]=Yta[11];Lz2[1]=Zta[11];

  Lx1[2]=Xtb2[7];Ly1[2]=Ytb2[7];Lz1[2]=Ztb2[7];
  Lx2[2]=Xta2[6];Ly2[2]=Yta2[6];Lz2[2]=Zta2[6];

  Lx1[3]=Xtb2[6];Ly1[3]=Ytb2[6];Lz1[3]=Ztb2[6];
  Lx2[3]=Xtc2[7];Ly2[3]=Ytc2[7];Lz2[3]=Ztc2[7];

  Lx1[4]=Xtb2[2];Ly1[4]=Ytb2[2];Lz1[4]=Ztb2[2];
  Lx2[4]=Xtc2[3];Ly2[4]=Ytc2[3];Lz2[4]=Ztc2[3];

  Lx1[5]=Xtc2[2];Ly1[5]=Ytc2[2];Lz1[5]=Ztc2[2];
  Lx2[5]=Xtd2[3];Ly2[5]=Ytd2[3];Lz2[5]=Ztd2[3];

  Lx1[6]=Xtc2[6];Ly1[6]=Ytc2[6];Lz1[6]=Ztc2[6];
  Lx2[6]=Xtd2[7];Ly2[6]=Ytd2[7];Lz2[6]=Ztd2[7];


  setcolor (10);
  DespliegaOBJETO(Lx1,Ly1,Lz1,Lx2,Ly2,Lz2,6);
  setcolor (13);
  DespliegaOBJETO(Xte1,Yte1,Zte1,Xte12,Yte12,Zte12,15);
  DespliegaOBJETO(Xte2,Yte2,Zte2,Xte22,Yte22,Zte22,15);
  setcolor (5);
  DespliegaOBJETO(Xtd,Ytd,Ztd,Xtd2,Ytd2,Ztd2,12);
  setcolor (14);
  DespliegaOBJETO(Xtb,Ytb,Ztb,Xtb2,Ytb2,Ztb2,12);
  DespliegaOBJETO(Xtc,Ytc,Ztc,Xtc2,Ytc2,Ztc2,12);
  setcolor (15);
  DespliegaOBJETO(Xta,Yta,Zta,Xta2,Yta2,Zta2,12);

  mA=0;
  mB=0;
  mC=0;
  mD=0;
  mE=0;

  do{
   ch=getch();
   switch(ch)
   {
    case 'A': { AnguloA=AnguloA+0.157;mA=1;}break;
    case 'Q': { AnguloA=AnguloA-0.157;mA=1;}break;

    case 'j': {
          if(AnguloB<1.4){ AnguloB=AnguloB+0.1;mB=1;}
          if(AnguloC<1.6){ AnguloC=AnguloC+0.1;mC=1;}
          if(AnguloD<2.0){ AnguloD=AnguloD+0.1;mD=1;}
         }break;
    case 'u': {
          if(AnguloB>0.01){ AnguloB=AnguloB-0.1;mB=1;}
          if(AnguloC>0.01){ AnguloC=AnguloC-0.1;mC=1;}
          if(AnguloD>0.01){ AnguloD=AnguloD-0.1;mD=1;}
         }break;
    case 'i': {
           if(AnguloB>0.01)
           {
            AnguloB=AnguloB-0.1;mB=1;
            if(AnguloC<1.6){ AnguloC=AnguloC+0.1;mC=1;}
            else
             if(AnguloD<2.0){ AnguloD=AnguloD+0.1;mD=1;}
           }
           else
            if(AnguloC>0.01)
            {
             AnguloC=AnguloC-0.1;mC=1;
             if(AnguloD<2.0) { AnguloD=AnguloD+0.1;mD=1;}
            }
            else
             if(AnguloD>0.01){ AnguloD=AnguloD-0.1;mD=1;}
          }break;
    case 'k': {
           if(AnguloB<1.4)
           {
            AnguloB=AnguloB+0.1;mB=1;
            if(AnguloC>0.01){ AnguloC=AnguloC-0.1;mC=1;}
            else
             if(AnguloD>0.01){ AnguloD=AnguloD-0.1;mD=1;}
           }
           else
            if(AnguloC<1.6)
            {
             AnguloC=AnguloC+0.1;mC=1;
             if(AnguloD>0.01){ AnguloD=AnguloD-0.1;mD=1;}
            }
            else
             if(AnguloD<2.0){ AnguloD=AnguloD+0.1;mD=1;}
          }break;

    case 's': if(AnguloB<1.4){ AnguloB=AnguloB+0.1;mB=1;}break;
    case 'w': if(AnguloB>0.01){ AnguloB=AnguloB-0.1;mB=1;}break;
    case 'd': if(AnguloC<1.6){ AnguloC=AnguloC+0.1;mC=1;}break;
    case 'e': if(AnguloC>0.01){ AnguloC=AnguloC-0.1;mC=1;}break;
    case 'f': if(AnguloD<2.0){ AnguloD=AnguloD+0.1;mD=1;}break;
    case 'r': if(AnguloD>0.01){ AnguloD=AnguloD-0.1;mD=1;}break;
    case 'g': if(AnguloE<1.0){ AnguloE=AnguloE+0.1;mE=1;}break;
    case 't': if(AnguloE>0.01){ AnguloE=AnguloE-0.1;mE=1;}break;
   }
   if(ch==27)break;
  }while(kbhit()||(!mA&&!mB&&!mC&&!mD&&!mE));

  CopiaAtemporal(Xta,Yta,Zta,Xta2,Yta2,Zta2,       Xtta ,Ytta,Ztta,Xtta2,Ytta2,Ztta2,12);
  CopiaAtemporal(Xtb,Ytb,Ztb,Xtb2,Ytb2,Ztb2,       Xttb ,Yttb,Zttb,Xttb2,Yttb2,Zttb2,12);
  CopiaAtemporal(Xtc,Ytc,Ztc,Xtc2,Ytc2,Ztc2,       Xttc ,Yttc,Zttc,Xttc2,Yttc2,Zttc2,12);
  CopiaAtemporal(Xtd,Ytd,Ztd,Xtd2,Ytd2,Ztd2,       Xttd ,Yttd,Zttd,Xttd2,Yttd2,Zttd2,12);
  CopiaAtemporal(Xte1,Yte1,Zte1,Xte12,Yte12,Zte12, Xtte1,Ytte1,Ztte1,Xtte12,Ytte12,Ztte12,15);
  CopiaAtemporal(Xte2,Yte2,Zte2,Xte22,Yte22,Zte22, Xtte2,Ytte2,Ztte2,Xtte22,Ytte22,Ztte22,15);

  CopiaAtemporal(Xa,Ya,Za,Xa2,Ya2,Za2, Xta,Yta,Zta,Xta2,Yta2,Zta2,12);
  CopiaAtemporal(Xb,Yb,Zb,Xb2,Yb2,Zb2, Xtb,Ytb,Ztb,Xtb2,Ytb2,Ztb2,12);
  CopiaAtemporal(Xc,Yc,Zc,Xc2,Yc2,Zc2, Xtc,Ytc,Ztc,Xtc2,Ytc2,Ztc2,12);
  CopiaAtemporal(Xd,Yd,Zd,Xd2,Yd2,Zd2, Xtd,Ytd,Ztd,Xtd2,Ytd2,Ztd2,12);
  CopiaAtemporal(Xe1,Ye1,Ze1,Xe12,Ye12,Ze12, Xte1,Yte1,Zte1,Xte12,Yte12,Zte12,15);
  CopiaAtemporal(Xe2,Ye2,Ze2,Xe22,Ye22,Ze22, Xte2,Yte2,Zte2,Xte22,Yte22,Zte22,15);

   //{Mano}
   GiraXY(10,150,Xte1,Yte1,15,AnguloE);GiraXY(10,150,Xte12,Yte12,15,AnguloE);
   GiraXY(30,150,Xte2,Yte2,15,-AnguloE);GiraXY(30,150,Xte22,Yte22,15,-AnguloE);
   //{Mu¤eca dobla}
   GiraXY(10,140,Xtd,Ytd,12,AnguloD);  GiraXY(10,140,Xtd2,Ytd2,12,AnguloD);
   GiraXY(10,140,Xte1,Yte1,15,AnguloD);GiraXY(10,140,Xte12,Yte12,15,AnguloD);
   GiraXY(10,140,Xte2,Yte2,15,AnguloD);GiraXY(10,140,Xte22,Yte22,15,AnguloD);{}
   //{codo}
   GiraXY(10,80,Xtc,Ytc,12,AnguloC);  GiraXY(10,80,Xtc2,Ytc2,12,AnguloC);
   GiraXY(10,80,Xtd,Ytd,12,AnguloC);  GiraXY(10,80,Xtd2,Ytd2,12,AnguloC);
   GiraXY(10,80,Xte1,Yte1,15,AnguloC);GiraXY(10,80,Xte12,Yte12,15,AnguloC);
   GiraXY(10,80,Xte2,Yte2,15,AnguloC);GiraXY(10,80,Xte22,Yte22,15,AnguloC);
   //{hombro}
   GiraXY(10,30,Xtb,Ytb,12,AnguloB);  GiraXY(10,30,Xtb2,Ytb2,12,AnguloB);
   GiraXY(10,30,Xtc,Ytc,12,AnguloB);  GiraXY(10,30,Xtc2,Ytc2,12,AnguloB);
   GiraXY(10,30,Xtd,Ytd,12,AnguloB);  GiraXY(10,30,Xtd2,Ytd2,12,AnguloB);
   GiraXY(10,30,Xte1,Yte1,15,AnguloB);GiraXY(10,30,Xte12,Yte12,15,AnguloB);
   GiraXY(10,30,Xte2,Yte2,15,AnguloB);GiraXY(10,30,Xte22,Yte22,15,AnguloB);
   //{base}
   GiraXY(20,20,Xta,Zta,12,AnguloA);  GiraXY(20,20,Xta2,Zta2,12,AnguloA);
   GiraXY(20,20,Xtb,Ztb,12,AnguloA);  GiraXY(20,20,Xtb2,Ztb2,12,AnguloA);
   GiraXY(20,20,Xtc,Ztc,12,AnguloA);  GiraXY(20,20,Xtc2,Ztc2,12,AnguloA);
   GiraXY(20,20,Xtd,Ztd,12,AnguloA);  GiraXY(20,20,Xtd2,Ztd2,12,AnguloA);
   GiraXY(20,20,Xte1,Zte1,15,AnguloA);GiraXY(20,20,Xte12,Zte12,15,AnguloA);
   GiraXY(20,20,Xte2,Zte2,15,AnguloA);GiraXY(20,20,Xte22,Zte22,15,AnguloA);

  setcolor(1);
  if (mA)
   DespliegaOBJETO(Xtta,Ytta,Ztta,Xtta2,Ytta2,Ztta2,12);
  if (mA||mB)
   DespliegaOBJETO(Xttb,Yttb,Zttb,Xttb2,Yttb2,Zttb2,12);
  if (mA||mB||mC)
   DespliegaOBJETO(Xttc,Yttc,Zttc,Xttc2,Yttc2,Zttc2,12);
  if (mA||mB||mC||mD)
   DespliegaOBJETO(Xttd,Yttd,Zttd,Xttd2,Yttd2,Zttd2,12);
  if (mA||mB||mC||mD||mE)
  {
   DespliegaOBJETO(Xtte1,Ytte1,Ztte1,Xtte12,Ytte12,Ztte12,15);
   DespliegaOBJETO(Xtte2,Ytte2,Ztte2,Xtte22,Ytte22,Ztte22,15);
  }
  if (mA||mB||mC||mD||mE)
   DespliegaOBJETO(Lx1,Ly1,Lz1,Lx2,Ly2,Lz2,6);
 }while(ch!=27);
 closegraph();
}




Nadie ha puesto ningún comentario todavía


Haz un comentario sobre este tema
Nombre email (no se muestra)
comentario:
Escribe las 2 letras que ves aquí: Imagen anti-spam =




No hay comentarios