Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
//б®бв ў п ЄгЎЁзҐбЄ п ‚-бЇ« ©®ў п ЄаЁў п
#include <stdio.h>
#include <graphics.h>
#include <process.h>
#include <conio.h>
#include <bios.h>
union inkey //§¤Ґбм еа Ёвбп Ёд®а¬ жЁп ® ¦ в®© Є« ўЁиҐ
{ //ch[0] -¬« ¤иЁ© Ў ©в, ch[1] -бв аиЁ© Ў ©в
char ch[2]; //ch[1] -Є®¤ бЄ Ёа®ў Ёп Є« ўЁиЁ
int i; //ch[0] -ASCII Є®¤
} c; //i -®ЎкҐ¤ЁҐЁҐ ¤ўге Ў ©в ў б«®ў®
struct Point2
{
double x;
double y;
};
void BsplineCom(Point2 p[], int i, double t, double r[])
{
double t2 = t*t, t3 = t2*t;
double b0 = (1 - 3*t + 3*t2 - t3)/6;
double b1 = (4 - 6*t2 + 3*t3)/6;
double b2 = (1 + 3*t + 3*t2 - 3*t3)/6;
double b3 = t3/6;
r[0] = p[i].x*b0 + p[i+1].x*b1 + p[i+2].x*b2 + p[i+3].x*b3;
r[1] = p[i].y*b0 + p[i+1].y*b1 + p[i+2].y*b2 + p[i+3].y*b3;
}
void main()
{
int driver=DETECT;
int mode;
int res;
initgraph(&driver,&mode,"d:\\mathemat\\borlandc\\bgi");
if((res=graphresult())!=grOk)
{
printf("\nGraphics error: %s",grapherrormsg(res));
exit(1);
}
// setbkcolor(3);
// setcolor(2);
setfillstyle(1,3);
bar(0,0,getmaxx(),getmaxy());
setcolor(12);
outtextxy(5, 7, "Korneev V");
setcolor(15);
outtextxy(120, 7, "Composite B-spline curve "
"( 4 elementary cubic curves)");
setcolor(14);
outtextxy(100, 460, "Motion of a point - arrows, Exit - Esc");
setcolor(15);
rectangle(30,30,getmaxx()-30,getmaxy()-30);
setviewport(33,33,getmaxx()-33,getmaxy()-33,1);
clearviewport();
// getch();
Point2 V[7];
V[0].x = 150; V[0].y = 50;
V[1].x = 50; V[1].y = 150;
V[2].x = 100; V[2].y = 300;
V[3].x = 300; V[3].y = 270;
V[4].x = 400; V[4].y = 150;
V[5].x = 500; V[5].y = 250;
V[6].x = 450; V[6].y = 400;
double r[2];
while(1)
{
for(int i=0; i<6; i++)
line(V[i].x,V[i].y,V[i+1].x,V[i+1].y);
int N=100;
double t,dt=1.0/N;
for(int j=0; j< 4; j++)
for(i=0; i<N; i++)
{
t=dt*i;
BsplineCom(V,j,t,r);
putpixel((int)r[0],(int)r[1],11+j);
}
// while(!bioskey(1)); //Їа®ўҐапҐв Ґбвм «Ё бЁ¬ў®« ў ЎгдҐаҐ ўў®¤
//дгЄжЁп Ґ ®бв® ў«Ёў Ґв Їа®Ја ¬¬г
c.i=bioskey(0); //ў®§ўа й Ґв Є®¤ ¦ в®© Є« ўЁиЁ (ЇаҐалў ЁҐ 0x14)
//Ё § ЇЁблў Ґв ў ®ЎкҐ¤ЁҐҐ б
//Ґб«Ё ЎгдҐа Їгбв, в® Їа®Ја ¬¬ ®бв ў«Ёў Ґвбп
if(c.ch[0]==0 && c.ch[1]==72) V[3].y -= 5;
if(c.ch[0]==0 && c.ch[1]==80) V[3].y += 5;
if(c.ch[0]==0 && c.ch[1]==75) V[3].x -= 5;
if(c.ch[0]==0 && c.ch[1]==77) V[3].x += 5;
if(c.ch[0]==27) break;
clearviewport();
// getch();
}
closegraph();
}
Соседние файлы в папке Lines