Нарисовать Солнце - Turbo Pascal (29797)
Формулировка задачи:
Не могу понять как нарисовать закрашенные треугольные лучи солнца (картинка во вложении), код ниже:
Решение задачи: «Нарисовать Солнце»
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, которая ожидает ввода с клавиатуры и завершает выполнение программы.