Нарисовать Солнце - Turbo Pascal (29797)
Формулировка задачи:
Не могу понять как нарисовать закрашенные треугольные лучи солнца (картинка во вложении), код ниже:
Листинг программы
- uses crt,graph;
- const CENTR_X=200; CENTR_Y=200; {центр окружности}
- RADIUS = 50; {радиус}
- var
- d,m : smallint;
- i : integer;
- x1,y1,x2,y2,x3,y3 : integer;
- begin
- clrscr;
- d := detect;
- initgraph(d,m,'');
- setcolor(14); { меняем цвет на желтый }
- circle(CENTR_X,CENTR_Y,RADIUS); { рисуем окружность }
- setfillstyle(1,14); { устанавливаем стиль закрашивания }
- floodfill(CENTR_X,CENTR_Y,14); { закрашиваем окружность }
- {теперь рисуем лучи. Всего 8.}
- for i:=1 to 8 do
- begin
- case i of
- 1 : begin
- Line (190,130,210,130)
- end;
- end; {case}
- moveto(CENTR_X,CENTR_Y);
- end;
- readln;
- closegraph;
- end.
Решение задачи: «Нарисовать Солнце»
textual
Листинг программы
- uses graph;
- {процедура рисования треугольника}
- procedure trg(x,y,a:integer;u:real);
- var i:byte;
- p:array[1..4] of pointtype;
- begin
- p[1].x:=x+round(a*cos(u+pi/2));
- p[1].y:=y-round(a*sin(u+pi/2));
- p[2].x:=x+round(a*cos(u-pi/2));
- p[2].y:=y-round(a*sin(u-pi/2));
- p[3].x:=x+round(3*a*cos(u));
- p[3].y:=y-round(3*a*sin(u));
- p[4]:=p[1];
- setcolor(14);
- setfillstyle(1,14);
- fillpoly(4,p);
- end;
- var x0,y0,r,r1,a,i,x,y: integer;
- u:real;
- begin
- x0:= detect;
- initgraph(x0,y0,'');
- x0:=getmaxX div 2;
- y0:=getmaxY div 2;
- r:=(y0-50) div 3;
- a:=r div 4;
- setcolor(14);
- setfillstyle(1,14);
- fillellipse(x0,y0,r,r);
- u:=pi/2;
- r1:=r+r div 10;
- for i:=1 to 8 do
- begin
- x:=x0+round(r1*cos(u));
- y:=y0-round(r1*sin(u));
- trg(x,y,a,u);
- u:=u+pi/4;
- end;
- readln
- end.
Объяснение кода листинга программы
- В начале кода подключается библиотека graph, которая, вероятно, содержит функции для работы с графиками.
- Затем определяется процедура trg, которая рисует треугольник. В ней используются переменные i, p и u. Переменная i является байтом, а переменные p - массивом типа pointtype (предположительно, это структура или запись, представляющая точку на графике). Переменная u - вещественное число, вероятно, используется для вычисления углов.
- Далее определяются переменные x0, y0, r, r1 и a. Переменные x0 и y0 представляют координаты центра графического окна, а переменные r и r1 представляют радиус и увеличенный радиус эллипса соответственно. Переменная a представляет собой отношение между радиусом и высотой эллипса.
- Затем вызывается функция initgraph, которая инициализирует график с указанными координатами центра и именем графика.
- После этого вычисляются координаты верхней и нижней точек эллипса с помощью формулы (y0-50) / 3 и (y0+50) / 3 соответственно.
- Далее определяется цикл, который будет выполняться 8 раз. Внутри цикла вычисляются координаты левой и правой точек эллипса с помощью формулы (x0+round(r1cos(u))) и (y0-round(r1sin(u))) соответственно. Затем вызывается процедура trg с этими координатами и значением u, которое увеличивается на pi/4 после каждой итерации цикла.
- В конце кода вызывается функция readln, которая ожидает ввода с клавиатуры и завершает выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д