Файл:Вращающиеся треугольники Серпинского.png
Вращающиеся_треугольники_Серпинского.png (637 × 475 пкс, размер файла: 163 Кб, MIME-тип: image/png)
Cведения об этом файле находятся на Викискладе?, хранилище изображений и мультимедиа для использования во всех проектах Фонда Викимедиа. |
Краткое описание
ОписаниеВращающиеся треугольники Серпинского.png |
Русский: Вращающиеся треугольники Серпинского English: Rotating Sierpinski Triangles |
Дата | |
Источник | Собственная работа |
Автор | Владислав Молдован |
Pascal src code
- N - specifies three iterations of the for loop
- M - number of fractals
- Angle - angle of rotation when drawing a triangle
}}
uses GraphABC;
const
N = 2;
M = 20;
Angle = 120;
var
W, H: integer;
type
Fractal = class
CenterX, CenterY, Length: integer;
C: Color;
Ang: real;
Points: array [0..N] of Point;
constructor ();
begin
for var i := 0 to N do
Points[i] := new Point(0, 0);
Length := Random(100);
C := clRandom();
CenterX := Random(W);
CenterY := Random(H);
end;
procedure Draw(x, y, x1, y1, x2, y2: integer);
begin
Line(x, y, x1, y1);
Line(x1, y1, x2, y2);
Line(x2, y2, x, y);
var cx1 := (x + x1) div 2;
var cy1 := (y + y1) div 2;
var cx2 := (x1 + x2) div 2;
var cy2 := (y1 + y2) div 2;
var cx3 := (x2 + x) div 2;
var cy3 := (y2 + y) div 2;
if Sqrt(Sqr(cx2 - cx1) + Sqr(cy2 - cy1)) > 10 then
begin
Draw(x, y, cx1, cy1, cx3, cy3);
Draw(x1, y1, cx1, cy1, cx2, cy2);
Draw(x2, y2, cx2, cy2, cx3, cy3);
end;
end;
procedure RedrawFractal();
begin
SetPenColor(C);
for var i := 0 to N do
begin
var ang1 := DegToRad(Angle * i + Ang);
Points[i].X := Round(CenterX + Length * Cos(ang1));
Points[i].Y := Round(CenterY + Length * Sin(ang1));
end;
Draw(Points[0].X, Points[0].Y, Points[1].X, Points[1].Y, Points[2].X, Points[2].Y);
for var i := 0 to N do
begin
var ang1 := DegToRad(Angle * i - Ang);
Points[i].X := Round(CenterX + Length * Cos(ang1));
Points[i].Y := Round(CenterY + Length * Sin(ang1));
end;
Draw(Points[0].X, Points[0].Y, Points[1].X, Points[1].Y, Points[2].X, Points[2].Y);
Ang := Ang + 1;
end;
end;
var
Fractals: array [0..M] of Fractal;
begin
W := Window.Width;
H := Window.Height;
SetWindowIsFixedSize(true);
LockDrawing();
for var i := 0 to M do
Fractals[i] := new Fractal();
while true do
begin
ClearWindow(clBlack);
for var i := 0 to M do
Fractals[i].RedrawFractal();
Redraw();
end;
end.
{Адаптировано под PascalABC 3.0.1.35.}
uses GraphABC, PointRect;
const
N = 30;
M = 20;
Angle = 120;
var
W, H: integer;
function DegToRad(x: real): real;
begin
Result := x * 0.0174533;
end;
type
Fractal = class
CenterX, CenterY, Length: integer;
C: ColorType;
Ang: real;
Points: array [0..N] of Point;
constructor Create;
var
i: integer;
begin
for i := 0 to N do
Points[i] := PointF(0, 0);
Length := Random(100);
C := RGB(Random(255), Random(255), Random(255));
CenterX := Random(W);
CenterY := Random(H);
end;
procedure Draw(x, y, x1, y1, x2, y2: integer);
var
cx1, cy1: integer;
cx2, cy2: integer;
cx3, cy3: integer;
begin
Line(x, y, x1, y1);
Line(x1, y1, x2, y2);
Line(x2, y2, x, y);
cx1 := (x + x1) div 2;
cy1 := (y + y1) div 2;
cx2 := (x1 + x2) div 2;
cy2 := (y1 + y2) div 2;
cx3 := (x2 + x) div 2;
cy3 := (y2 + y) div 2;
if Sqrt(Sqr(cx2 - cx1) + Sqr(cy2 - cy1)) > 10 then
begin
Draw(x, y, cx1, cy1, cx3, cy3);
Draw(x1, y1, cx1, cy1, cx2, cy2);
Draw(x2, y2, cx2, cy2, cx3, cy3);
end;
end;
procedure RedrawFractal;
var
i: integer;
ang1: real;
begin
SetPenColor(C);
for i := 0 to N do
begin
ang1 := DegToRad(Angle * i + Ang);
Points[i].X := Round(CenterX + Length * Cos(ang1));
Points[i].Y := Round(CenterY + Length * Sin(ang1));
end;
Draw(Points[0].X, Points[0].Y, Points[1].X, Points[1].Y, Points[2].X, Points[2].Y);
for i := 0 to N do
begin
ang1 := DegToRad(Angle * i - Ang);
Points[i].X := Round(CenterX + Length * Cos(ang1));
Points[i].Y := Round(CenterY + Length * Sin(ang1));
end;
Draw(Points[0].X, Points[0].Y, Points[1].X, Points[1].Y, Points[2].X, Points[2].Y);
Ang := Ang + 1;
end;
end;
var
A: array [0..M] of Fractal;
i: integer;
begin
W := WindowWidth();
H := WindowHeight();
LockDrawing();
for i := 0 to M do
A[i] := Fractal.Create();
while true do
begin
ClearWindow(clBlack);
for i := 0 to M do
A[i].RedrawFractal();
Redraw();
end;
end.
Лицензирование
Я, владелец авторских прав на это произведение, добровольно публикую его на условиях следующей лицензии:
Этот файл доступен по лицензии Creative Commons Attribution-Share Alike 4.0 International
- Вы можете свободно:
- делиться произведением – копировать, распространять и передавать данное произведение
- создавать производные – переделывать данное произведение
- При соблюдении следующих условий:
- атрибуция – Вы должны указать авторство, предоставить ссылку на лицензию и указать, внёс ли автор какие-либо изменения. Это можно сделать любым разумным способом, но не создавая впечатление, что лицензиат поддерживает вас или использование вами данного произведения.
- распространение на тех же условиях – Если вы изменяете, преобразуете или создаёте иное произведение на основе данного, то обязаны использовать лицензию исходного произведения или лицензию, совместимую с исходной.
Элементы, изображённые на этом файле
изображённый объект
У этого свойства есть некоторое значение без элемента в
1 сентября 2017
image/png
История файла
Нажмите на дату/время, чтобы увидеть версию файла от того времени.
Дата/время | Миниатюра | Размеры | Участник | Примечание | |
---|---|---|---|---|---|
текущий | 09:32, 1 сентября 2017 | 637 × 475 (163 Кб) | Владислав Молдован | User created page with UploadWizard |
Использование файла
Следующая страница использует этот файл:
Метаданные
Файл содержит дополнительные данные, обычно добавляемые цифровыми камерами или сканерами. Если файл после создания редактировался, то некоторые параметры могут не соответствовать текущему изображению.
Горизонтальное разрешение | 37,79 точек на сантиметр |
---|---|
Вертикальное разрешение | 37,79 точек на сантиметр |