Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2012, 21:31   #1
kalosha-stepa
Пользователь
 
Регистрация: 13.09.2012
Сообщений: 25
По умолчанию треугольник серпинского

Нарисовать классический фрактал («Ковер Серпинского»). Пользователь задает глубину самоповторения.

Нужно доделать

Код:
Uses GraphABC;
type
   Coord = record
   x: real;
   y: real;
end;
 
Const
    MaxX=800;       // Размер графического окна по X
    MaxY=700;       // Размер графического окна по Y
    MinTriWidth=10;   // Размер по оси X минимального треугольника
 
var
   k1, k2, k3: Coord;
 
Procedure DrawTriangle(k1: Coord; k2: Coord; k3: Coord);
var
   k4, k5, k6: Coord;
   col: integer;
begin
   // Расчет новых опорных точек
    k4.x:=(k2.x+k1.x)/2;
    k4.y:=(k2.y+k1.y)/2;
    k5.x:=(k3.x+k2.x)/2;
    k5.y:=(k3.y+k2.y)/2;
    k6.x:=(k3.x+k1.x)/2;
    k6.y:=(k3.y+k1.y)/2;
 
    // Рисуем треугольник 1
    Line(round(k1.x), round(k1.y), round(k4.x), round(k4.y));
    Line(round(k4.x), round(k4.y), round(k6.x), round(k6.y));
    Line(round(k6.x), round(k6.y), round(k1.x), round(k1.y));
    // Рисуем треугольник 2
    Line(round(k4.x), round(k4.y), round(k2.x), round(k2.y));
    Line(round(k2.x), round(k2.y), round(k5.x), round(k5.y));
    Line(round(k5.x), round(k5.y), round(k4.x), round(k4.y));
    // Рисуем треугольник 3
    Line(round(k6.x), round(k6.y), round(k5.x), round(k5.y));
    Line(round(k5.x), round(k5.y), round(k3.x), round(k3.y));
    Line(round(k3.x), round(k3.y), round(k6.x), round(k6.y));
    Sleep(1);         // Задержка,чтобы было видно как рисуется фрактал
 
    // Если не достигнута минимальная ширина треугольника, то рисовать следующую итерацию
    if (Abs(k4.x-k1.x)>MinTriWidth) then DrawTriangle(k1, k4, k6);
 
    if (Abs(k2.x-k4.x)>MinTriWidth) then  DrawTriangle(k4, k2, k5);
 
    if (Abs(k5.x-k6.x)>MinTriWidth) then DrawTriangle(k6, k5, k3);
    end;
end;
 
BEGIN
SetWindowSize(MaxX, MaxY);
    k1.x:=10;
    k1.y:=MaxY-10;
    k2.x:=400;
    k2.y:=MaxY-685;
    k3.x:=790;
    k3.y:=MaxY-10;
    DrawTriangle(k1, k2, k3);
 
END.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 12.10.2012 в 09:12.
kalosha-stepa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение кривых Серпинского и Гильберта Delphi KEnt Помощь студентам 3 07.10.2017 11:42
Треугольник С++ i.yakushev Помощь студентам 18 05.05.2011 20:55
C++(треугольник) Runner Помощь студентам 2 13.05.2010 10:32
ковер серпинского StoneSour Общие вопросы C/C++ 2 07.04.2010 20:21
Треугольник serega11 Помощь студентам 2 22.05.2008 09:01