Фрактал. Треугольники (не Серпинского) - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста с графикой, нужен такой фрактал

Решение задачи: «Фрактал. Треугольники (не Серпинского)»

textual
Листинг программы
uses graphABC,crt;
procedure koh(x1,y1,x2,y2,x3,y3,k:integer);
var xxs,yys,xx1,yy1,xx2,yy2,xx3,yy3:integer;
al:real;
begin
 if k>0 then
 begin
 {t1,t2}
 xx1:=round((2*x1+x2)/3);
 yy1:=round((2*y1+y2)/3);
 xx2:=round((2*x2+x1)/3);
 yy2:=round((2*y2+y1)/3);
 {t3}
 xxs:=round((x1+x2)/2);
 yys:=round((y1+y2)/2);
 xx3:=abs(round((4*xxs-x3)/3));
 yy3:=abs(round((4*yys-y3)/3));
 {risuem 1-3,3-2}
 SetpenColor(clBlack);
 Setpenwidth(1);
 MoveTo(xx1,yy1);
 LineTo(xx3,yy3);
 LineTo(xx2,yy2);
 koh(xx1,yy1,xx3,yy3,xx2,yy2,k-1);
 koh(xx3,yy3,xx2,yy2,xx1,yy1,k-1);
 koh(x1,y1,xx1,yy1,round((2*x1+x3)/3),round((2*y1+y3)/3),k-1);
 koh(x2,y2,xx2,yy2,round((2*x2+x3)/3),round((2*y2+y3)/3),k-1);
 end;
end;
 
var n,xc,yc,x1,y1,x2,y2,x3,y3,a:integer;
    h:real;
begin
repeat
write('ÃëóáèГ*Г* ðåêóðñèè [1..8] n=');
read(n);
until n in [1..8];
hidecursor;
xc:=windowwidth div 2;{centr ekrana}
yc:=windowheight div 2;
a:=300;
h:=a*sin(pi/3);{vysota treugilnika}
x1:=xc-a div 2;
y1:=yc+round(h/3);
x2:=xc;
y2:=yc-round(2*h/3);
x3:=xc+a div 2;
y3:=y1;
Moveto(x1,y1);
LineTo(x2,y2);
LineTo(x3,y3);
LineTo(x1,y1);
koh(x1,y1,x2,y2,x3,y3,n);
koh(x2,y2,x3,y3,x1,y1,n);
koh(x3,y3,x1,y1,x2,y2,n);
end.

Объяснение кода листинга программы

  1. Объявлены следующие переменные:
    • n, xc, yc, x1, y1, x2, y2, x3, y3, a, h: целочисленные или вещественные переменные (в зависимости от типа данных, которые они содержат)
    • koh: процедура
    • uses graphABC, crt: директивы использования модулей
  2. В основной части программы после цикла повторяемости, задаются начальные значения переменных:
    • n: задается значение 3
    • xc, yc: задаются средние координаты экрана
    • a: задается значение 300
    • h: вычисляется значение на основе a и pi/3
    • x1, y1: задаются координаты левого верхнего угла треугольника
    • x2, y2: задаются координаты правого нижнего угла треугольника
    • x3, y3: задаются координаты диагонали треугольника, исходящей из левого верхнего угла
  3. Выполняются следующие действия:
    • Строка с координатами треугольника выводится на экран
    • Строка с координатами треугольника записывается в файл
    • Переменная koh вызывается рекурсивно для каждого из треугольников, образованных в результате деления исходного треугольника на 4 равные части
    • Переменная koh вызывается рекурсивно для каждого из треугольников, образованных в результате деления исходного треугольника на 4 равные части
    • Переменная koh вызывается рекурсивно для каждого из треугольников, образованных в результате деления исходного треугольника на 4 равные части
    • Переменная koh вызывается рекурсивно для каждого из треугольников, образованных в результате деления исходного треугольника на 4 равные части
  4. Переменная koh определена как процедура, которая принимает 7 аргументов:
    • x1, y1, x2, y2, x3, y3, k: целочисленные переменные
  5. Переменные xx1, yy1, xx2, yy2, xx3, yy3, al: вещественные переменные
  6. Значения переменных xx1, yy1, xx2, yy2, xx3, yy3, al вычисляются внутри процедуры koh
  7. Используются функции round и abs для округления и получения абсолютного значения
  8. Используются функции sin и pi для вычисления значения h
  9. Используются функции Moveto и LineTo для рисования треугольника
  10. Используется функция read для считывания ввода пользователя
  11. Используется функция repeat для выполнения повторяющихся действий
  12. Используется функция hidecursor для скрытия курсора
  13. Используется функция windowwidth и windowheight для получения ширины и высоты окна
  14. Используется функция a*sin(pi/3) для вычисления значения h
  15. Используется функция a div 2 для вычисления значения a/2
  16. Используется функция a*sin(pi/3) для вычисления значения h
  17. Используется функция a*sin(pi/3) для вычисления значения h
  18. Используется функция a*sin(pi/3) для вычисления значения h
  19. Используется функция a*sin(pi/3) для вычисления значения h
  20. Используется функция a*sin(pi/3) для вычисления значения h

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы