КОМПЬЮТЕРНАЯ ГРАФИКА. Лабораторая работа: Построить эллипсоид, заданный уравнением
Кафедра ЭВМ
КОМПЬЮТЕРНАЯ ГРАФИКА Лабораторная работа №2
Кафедра ЭВМ
КОМПЬЮТЕРНАЯ ГРАФИКА
Лабораторная работа №2
Задание:
Построить эллипсоид, заданный уравнением:
Провести нормали.
Текст программы:
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<dos.h>
#include<math.h>
#include<stdlib.h>
#include <iostream.h>
#define Eps 30
#define Dist 1000
#define W 0
#define H 0
#define CX 320
#define CY 240
#define AA 300
#define BB 200
#define CC 100
typedef long double ld;
void getxy(ld x, ld y, ld z, ld &xx, ld &yy1, ld &yy2)
{
xx=CX+(W+Dist*(y-W)/(x+Dist));
yy1=CY-(H+Dist*(z-H)/(x+Dist));
yy2=CY+(H+Dist*(z-H)/(x+Dist));
}
ld func(double x,double y)
{
long double tmp=CC*(200-pow(x,2)/AA-pow(y,2)/BB);
return tmp<0?0:sqrt(tmp);
}
void main(void)
{
ld x,y,x1,y1,y2,y_1,nx,ny,nz,l,XX=0,YY=0;
int drv=DETECT,mod;
initgraph(&drv,&mod,\»\»);
cleardevice();
setcolor(8);
for(int i=-250;i<250;i+=Eps)
for(int j=-250;j<250;j+=Eps)
{
if(i>0) setcolor(8);
else setcolor(7);
getxy(i,j,func(i,j),x,y,y_1);
getxy(i+Eps,j,func(i+Eps,j),x1,y1,y2);
line(x,y,x1,y1); // верт. линии верх. полусферы
line(x,y_1,x1,y2); // верт. линии ниж. полусферы
getxy(i,j+Eps,func(i,j+Eps),x1,y1,y2);
line(x,y,x1,y1); // гориз. линии верх. полусферы
line(x,y_1,x1,y2); // гориз. линии ниж. полусферы
}
getch();
setcolor(1);
for(XX=-250;XX<250;XX+=Eps)
for(YY=-250;YY<250;YY+=Eps)
{
nx=2*XX/AA;
ny=2*YY/BB;
nz=2*func(XX,YY)/CC;
l=sqrt(nx*nx+ny*ny+nz*nz)/50;
nx/=l;
ny/=l;
nz/=l;
getxy(XX,YY,func(XX,YY),x,y,y_1);
getxy(nx+XX,ny+YY,nz+func(XX,YY),x1,y1,y2);
line(x,y,x1,y1);
line(x,y_1,x1,y2);
putpixel(x,y,9);
putpixel(x,y_1,9);
}
getch();
closegraph();
}
Результат работы программы:
Скачать полную версию можно по ссылке…
Скачать Лабораторая работа: Построить эллипсоид, заданный уравнением + еще 7 лабораторных по кафедре ЭВМ