Отримання знань

дистанційна підтримка освіти школярів


Тут ви можете виконати завдання чи задати питання по змiсту цього уроку.

1 (1) 2010-12-13 18:27:15
1)
При роботі з комп'ютерною графікою доводиться мати справу з двома системами координат. Перша система - це система координат пристрою (або екранна система координат). Координатами крапки в цій системі є номер піксела в рядку X і номер рядка пікселів Y:
0 <= X <= Xmax
0 <= Y <= Ymax
Початок координат розташовано в лівому верхньому кутку екрану. Параметри екранної системи координат (максимальне число пікселів в рядку Xmax та максимальне число рядків пікселів Ymax) залежать від типу монітора, відеоадаптера та поточного графічного режиму. Таким чином, ця система координат певним чином пов'язана з конкретним графічним пристроєм і режимами його роботи.
Друга система координат - так звана світова або математична. Вона являє собою декартову систему (х, у), яка визначається програмістом, і є незалежною від конкретного графічного пристрою:
xmin < x < xmax
ymin < y < ymax
Параметри, якими задаються діапазони зміни X і Y (Xmin, Ymin, Xmax, Ymax), визначають прямокутну область в математичному двовимірному просторі. Ці параметри залежать тільки від конкретного завдання.
Світові координати і координати пристрої зв'язані між собою простими співвідношеннями:{не вдалось вставити зображення}
Для того, щоб кожен раз, коли виникає необхідність у перетворенні координат з однієї системи в іншу, не писати ці вирази, зручно оформити обчислення X і Y у вигляді функцій. Наприклад:
var xmin, xmax, ymin, ymax : real;
function Xs( x:real ):longint;
begin
Xs := round( getmaxX * (x-xmin)/(xmax-xmin) );
end;
function Ys( y:real ):longint;
begin
Ys := round( getmaxY * (1-(y-ymin)/(ymax-ymin)) );
end;
2 (2) 2011-03-26 17:12:49
1. Я навчився працювати в математичній системі координат, раніш ми це ще не вчили, бо я тільки в 4-му класі. Зрозумів.
2. Взяв за основу функції XS та YS з дискусії (Артура)
3. Написав програму GR_DISKU, яка будує крапку на екрані, якщо задати її математичні координати і границі графіку (для масштабування)
4. Написав програму GRDISKU2, яка будує відрізок на екрані по заданих математичних координатах 2-х крапок
5. На екрані виходить такий самий графік, як і на бумазі
Нижче додаю ці дві програми.
{ ************************************************************** }
{ программа пересчета математических КООРДИНАТ ТОЧКИ на экранные }
{ внедренная с программы дискусии до уроку 4 автора Артура }
{ -------------------------------------------------------------- }
{ 24/03/2011 Саша Боднар }
{ ************************************************************** }
program gr_disku;
uses crt,graph;
var xar,yar:integer; { посчитанные экранные х,у}
var xa,ya:real; { заданные математические х,у }
var xmin,xmax,ymin,ymax: real;{ границы листа графика математичского}
function xs(x:real):longint; { функция перерахунку Х, предложенная в дискусии}
begin
xs:=round(getmaxx*(x-xmin)/(xmax-xmin));
end;
function ys(y:real):longint; { функция перерахунку У, предложенная в дискусии}
begin
ys:=round(getmaxy*(1-(y-ymin)/(ymax-ymin)));
end;
var dr,rm:integer;
begin
clrscr;
{ Задать координаты точки }
write('Задайте х_математическое=');
read(xa);
write('Задайте y_математическое=');
read(ya);
{ Задать границы графика математиского на листе }
write('Задайте х_математическое минимальное=');
read(xmin);
write('Задайте x_математическое максимальное=');
read(xmax);
write('Задайте y_математическое минимальное=');
read(ymin);
write('Задайте y_математическое максимальное=');
read(ymax);
{ Графический режим }
dr:=detect;
InitGraph(dr,rm,'d:\bp\bgi');
xar:=xs(xa);
yar:=ys(ya);
setcolor(15);
putpixel(xar,yar,15);
repeat until
keypressed;
closegraph;
{ Конец графического режима }
writeln;
writeln('Границы графика на бумаге по горизонтали: ',xmin:10:3,' ',xmax:10:3);
writeln('Границы графика на бумаге по вертикали: ',ymin:10:3,' ',ymax:10:3);
writeln;
writeln('x_математическое=',xa:10:3,' ==> x_экранное=',xar,' пикселов');
writeln('y_математическое=',ya:10:3,' ==> y_экранное=',yar,' пикcелов');
readln;
end.


{ ************************************************************** }
{ программа пересчета математических КООРДИНАТ ТОЧКИ на экранные }
{ внедренная с программы дискусии до уроку 4 автора Артура }
{ -------------------------------------------------------------- }
{ 24/03/2011 Саша Боднар }
{ ************************************************************** }
program grdisku2;
uses crt,graph;
var x1a,y1a,x2a,y2a:real; {посчитанные экранные х1a,у1a,x2a,y2a }
var x1e,y1e,x2e,y2e:integer; {заданные математические х1e,у1e,x2e,y2e }
var xmin,xmax,ymin,ymax: real;{ границы листа графика математичского}
function xs(x:real):longint; { функция перерахунку Х, предложенная в дискусии}
begin
xs:=round(getmaxx*(x-xmin)/(xmax-xmin));
end;
function ys(y:real):longint; { функция перерахунку У, предложенная в дискусии}
begin
ys:=round(getmaxy*(1-(y-ymin)/(ymax-ymin)));
end;
var dr,rm:integer;
begin
clrscr;

{ Задать координаты точeк }
write('Задайте х1_математическое=');
read(x1a);
write('Задайте y1_математическое=');
read(y1a);
write('Задайте х2_математическое=');
read(x2a);
write('Задайте y2_математическое=');
read(y2a);

{ Задать границы графика математиского на листе }
write('Задайте х_математическое минимальное=');
read(xmin);
write('Задайте x_математическое максимальное=');
read(xmax);
write('Задайте y_математическое минимальное=');
read(ymin);
write('Задайте y_математическое максимальное=');
read(ymax);
{ Графический режим }
dr:=detect;
InitGraph(dr,rm,'d:\bp\bgi');
x1e:=xs(x1a);
y1e:=ys(y1a);
x2e:=xs(x2a);
y2e:=ys(y2a);
setcolor(15);
line(x1e,y1e,x2e,y2e);
repeat until
keypressed;
closegraph;
{ Конец графического режима }
writeln;
writeln('Границы графика на бумаге по горизонтали: ',xmin:10:3,' ',xmax:10:3);
writeln('Границы графика на бумаге по вертикали: ',ymin:10:3,' ',ymax:10:3);
writeln;
writeln('x1_математическое=',x1a:10:3,' ==> x1_экранное=',x1e,' пикселов');
writeln('y1_математическое=',y1a:10:3,' ==> y1_экранное=',y1e,' пикcелов');
writeln('x2_математическое=',x2a:10:3,' ==> x2_экранное=',x2e,' пикселов');
writeln('y2_математическое=',y2a:10:3,' ==> y2_экранное=',y2e,' пикcелов');

readln;
end.


Повернутися до уроку

Повернутися до перелiку уроків курсу

В системі: гості - (); користувачі - (0)