- •Текстовый и графический режимы.
- •Графические координаты.
- •Переключение между текстовым и графическим режимами.
- •Установка цвета линии, типа линии и закраски.
- •Точки на экране
- •Линии и прямоугольники
- •Окружности, эллипсы, дуги.
- •Многоугольники
- •Вывод изображений в относительных координатах.
- •Работа с текстами в графическом режиме.
- •Графические окна.
- •Графики функций Задача 1.
- •Программы построения кривых на плоскости.
- •Задача 2.
- •Программы, использующие случайные числа и рекурсию Задача 3.
- •Задача 5.
- •Занимательная графика
- •Задача 8.
- •Трехмерные иллюзии.
- •Литература.
Программы построения кривых на плоскости.
остроить кривые по их уравнениям в полярных координатах:
Полярные координаты p, точки М на плоскости – это расстояние p=OM от фиксированной точки О (полюса до точки М и угол =РОМ между лучами ОМ и ОР (полярная ось). Например: М(2, /4).
Полярные координаты являются наиболее употребительными после декартовых координат. Это нелинейные координаты, порождающие криволинейные преобразования. При построении кривых, заданных в полярных координатах, полярные координаты переводят в декартовы. Если полюс имеет декартовы координаты (x0,y0), преобразования таковы:
x=x0+pcos; y=y0+psin.
Program Examp_26;
Uses crt, graph;
Var
k1,k2: Longint;
Procedure Graphinterface;
Var
driver, mode, error:Integer;
s:String;
i:0..6;
Begin
driver:=detect;
s:='';
Initgraph(driver,mode,s);
error:=GraphResult;
if error<>GrOk then
begin
writeln(GraphErrorMsg(Error));
Halt(error)
end;
SetColor(12);
for i:=0 to 6 do
begin
if i=12 then SetColor(6);
Rectangle(i,i,640-i,480-i);
end;
SetViewPort(8,8,630,470,ClipOff);
SetColor(11);SetBkColor(8);TextColor(11);
end; {Graphinterface}
Procedure Graphic;
Function R0(fi:Real):Real;
begin
R0:=3*cos(6*fi)+9;
(* {1} R0:=1; {окружность} *)
(* {2} R0:=fi; {спираль Архимеда} *)
(* {3} R0:=sin(7*fi);{семилепестковая роза} *)
(* {4} R0:=1-cos(fi); {кардиоида} *)
(* {5} R0:=5*cos(fi)+2; {улитка Паскаля} *)
if cos(2*fi)>=0 then
R0:=sqrt(2*cos(2*fi));
{лемниската Бернулли}
end;
Const c=2*pi;step=0.0005;
x0=320;y0=220;r=220;
Var k,Max,fi:Real;
begin
fi:=0;max:=0.0001;
{вычисление наибольшего значения функции}
Repeat
if max<abs(R0(fi)) then max:=abs(R0(fi));
fi:=fi+0.01;
Until fi>c;
fi:=0; {построение графика}
Repeat
k:=R0(fi)/max;
if k<=1 then
PutPixel(x0+Round(r*cos(k1*fi)*k),
y0+Round(r*sin(k2*fi)*k),15);
if KeyPressed then Exit else fi:=fi+step
Until fi>c
end; {Graphic}
Begin
Graphinterface;
Repeat
OutTextXY(180,14,'Введите два
коэффициента __');
GoToXY(50,2); Readln(k1,k2);
ClearViewPort;
Graphic;
OutTextXY(130,450,'Esc - выход,
Enter - изменить коэффициенты')
Until ReadKey=#27;
CloseGraph
End.
Полярный радиус и полярный угол являются первичными координатами: в цикле с шагом step изменяется полярный угол fi. Для записи уравнений в программе имеется функция R0. Ее наибольшее значение предварительно вычисляется для определения коэффициента масштабирования, который позволяет разместить график в пределах всего экрана. Вместо использования при построении декартовых координат rcos(fi), rsin(fi), вводятся еще два дополнительных параметра k1 и k2 в основные формулы: rcos(k1fi), rsin(k2fi). Тогда при k1=k2=1 программа будет строить стандартные графики, а при других значениях k1 и k2 выдавать множество разнообразных рисунков.