Объясните плиз зачем при нахождении трех координат Y, мы делим сторону на 3, и для одной координаты умножаем найденную координату на 2. Эти места выделены в программе.
#include <graphics.h>
#include <dos.h>
#include <math.h>
#include <alloc.h>
void main()
{int gdriver=0,gmode,xc,yc,a=50,i,j;
float x[4],y[4],z[4],x1[4],y1[4],z1[4],alpha,beta,o;
float xt=0,zt=0,theta=0.05;
unsigned char ch;
initgraph(&gdriver,&gmode,"");
xc=getmaxx()/2;
yc=getmaxy()/2;
alpha=M_PI/6; beta=M_PI/3;
y[1]=y[2]=y[3]=-a/3.; */Вот здесь почему делим на 3*/
y[0]=-2*y[1]; */Зачем умножаем на 2*/
o=2*a*sin(M_PI_4); /* оркужность с центром в т. (o,0,o) */
do
{cleardevice();
/* рисуем оси */
setcolor(LIGHTBLUE);
i=yc*cos(M_PI/6);
j=yc*1.5;
line(xc,yc,xc,0);
line(xc,yc,xc+i,j);
line(xc,yc,xc-i,j);
setcolor(LIGHTRED);
outtextxy(xc-10,2,"y");
outtextxy(xc+i-5,j-14,"x");
outtextxy(xc-i,j-14,"z");
setcolor(LIGHTGREEN);
/* определяем вершины через координаты центра тетраэдра */
x[0]=xt;
x[1]=xt;
x[2]=xt-a/2.;
x[3]=xt+a/2.;
z[0]=zt;
z[1]=zt+a/sqrt(3);
z[2]=zt-a/(2*sqrt(3));
z[3]=z[2];
/* пересчитываем координаты в экранные */
for(i=0;i<4;i++)
{x1[i]=x[i]*cos(alpha)-z[i]*sin(alpha)+xc;
y1[i]=x[i]*sin(alpha)*cos(beta)+z[i]*cos(alpha)*cos(beta)-y[i]*sin(beta)+yc;
z1[i]=x[i]*sin(alpha)*sin(beta)+z[i]*cos(alpha)*sin(beta)+y[i]*cos(beta); }
/* рисуем тетраэдр */
for(i=1;i<4;i++)
{if((j=i+1)==4) j=1;
line(x1[i],y1[i],x1[j],y1[j]);
line(x1[i],y1[i],x1[0],y1[0]);
}
x1[0]=xt*cos(alpha)-zt*sin(alpha)+xc;
y1[0]=xt*sin(alpha)*cos(beta)+zt*cos(alpha)*cos(beta)+yc;
putpixel(x1[0],y1[0],15);
/* вычисляем новые координаты тетраэдра */
xt-=o;
zt-=o;
x1[0]=xt*cos(theta)+zt*sin(theta);
z1[0]=-xt*sin(theta)+zt*cos(theta);
xt=x1[0]+o;
zt=z1[0]+o;
delay(10);
ch=inportb(0x60);
}
while(ch!=1);
closegraph();
}
Сообщение отредактировано: Neon6868 -