IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Графика в СИ, Подскажите что означает строка в программе
Neon6868
сообщение 15.12.2008 13:23
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


Необходимо нарисовать параллельную аксонометрическую проекцию равностороннего тетраэдра с единичными ребрами. Центр тетраэдра должен вращаться по окружности радиусом 2 с центром в начале координат, лежащей в плоскости OXZ. Требуется отобразить оси координат и некоторый объект. Центр окна должен совпадать с началом координат. Объект должен полностью уместиться в окне. Направление проектирования (вглубь экрана) (-0.5, -0.4, -0.3), направление вверх на экране и ось OY в пространстве должны лежать в одной плоскости. Для трансформаций следует использовать матрицы. Параметры осей координат следует рассчитывать с помощью тех же трансформаций.

Объясните плиз зачем при нахождении трех координат 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 - 15.12.2008 13:25
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 12:07
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"