Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы / Labs 2004 / Labor3 / Lines / BSPLINE2

.CPP
Скачиваний:
25
Добавлен:
16.04.2013
Размер:
2.65 Кб
Скачать
//б®бв ў­ п ЄгЎЁзҐбЄ п ‚-бЇ« ©­®ў п ЄаЁў п
#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