Главная » Информационные системы » Компьютерная геометрия и графика » Написать программу построения гладкой кривой по шести точкам с помощью В-сплайнов (координаты точек вводятся с клавиатуры)

Написать программу построения гладкой кривой по шести точкам с помощью В-сплайнов (координаты точек вводятся с клавиатуры)

Написать программу построения гладкой кривой по шести точкам с помощью В-сплайнов (координаты точек вводятся с клавиатуры)

{
X [-300;300] - диапозон x
Y [-200;200] - диапозон y
}
Program splayn6;
uses crt,graph;

var
 xm,ym,xi,yi,a0,a1,a2,a3,b0,b1,b2,b3,v,GrD,GrM:integer; { переменные типа integer }
 xv:array[1..6] of integer;
 yv:array[1..6] of integer;
 x:array[1..9] of integer;
 y:array[1..9] of integer;

graphDriver,GraphMode:integer; { переменные типа integer }

Procedure Ris;

 var i,j:integer;

 begin

 for v:=1 to 6 do {от 1-го до 6ти}
 PutPixel(xm+x[v],ym-y[v],15);

 for j:=2 to 7 do {от 2х до 7ми}

 begin
 a0:=round((x[j-1]+4*x[j]+x[j+1])/6);
 a1:=round((-x[j-1]+x[j+1])/2);
 a2:=round((x[j-1]-2*x[j]+x[j+1])/2);
 a3:=round((-x[j-1]+3*x[j]-3*x[j+1]+x[j+2])/6);
 b0:=round((y[j-1]+4*y[j]+y[j+1])/6);
 b1:=round((-y[j-1]+y[j+1])/2);
 b2:=round((y[j-1]-2*y[j]+y[j+1])/2);
 b3:=round((-y[j-1]+3*y[j]-3*y[j+1]+y[j+2])/6);

 for i:=1 to 120 do
 begin
 xi:=round(((a3*i/120+a2)*i/120+a1)*i/120+a0);
 yi:=round(((b3*i/120+b2)*i/120+b1)*i/120+b0);
 PutPixel (xm+xi,ym-yi,15);
 end;
 end;

 end;

Begin
 clrscr;
 writeln('Postroenie cplayna po 6 tockam');
 for v:=1 to 6 do { ввод 6 точек}
 Begin
 write('Vvedite koordinatu tocki X'); writeln(V); Readln(xv[v]);
 write('Vvedite koordinatu tocki Y'); writeln(V); Readln(yv[v]);

 end;

 x[1]:=xv[1];
 y[1]:=yv[1];
 x[2]:=xv[1];
 y[2]:=yv[1];
 x[3]:=xv[2];
 y[3]:=yv[2];
 x[4]:=xv[3];
 y[4]:=yv[3];
 x[5]:=xv[4];
 y[5]:=yv[4];
 x[6]:=xv[5];
 y[6]:=yv[5];
 x[7]:=xv[6];
 y[7]:=yv[6];
 x[8]:=xv[6];
 y[8]:=yv[6];
 x[9]:=xv[6];
 y[9]:=yv[6];

 graphDriver:=detect; {определяем дрова на видюху}
 initgraph(graphDriver,graphMode,''); { врубаем графу}

 xm:=GetMaxX div 2; {определяем середину}
 ym:=GetMaxY div 2; {определяем середину}

 MoveTo(0,ym); {перемещаемся в 0, ym}
 LineTo(GetMaxx,ym); {линия к getmaxx, ym}
 MoveTo(xm,0);
 LineTo(xm,GetMaxY);

 Ris; { выводим на экран}

 readln;
end.

 

 


Друзья! Приглашаем вас к обсуждению. Если у вас есть своё мнение, напишите нам в комментарии.

Поделиться
Дисциплины