-
Notifications
You must be signed in to change notification settings - Fork 0
/
Kantor.cs
40 lines (36 loc) · 1.98 KB
/
Kantor.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
using System.Windows.Controls;
namespace Fractario
{
/// <summary>
/// Наследуемый класс, реализующий алгоритм отрисовки множества Кантора.
/// </summary>
internal class Kantor : Fractal
{
/// <summary>
/// Переопределенный метод отрисовки фрактала для множества Кантора.
/// </summary>
/// <param name="x1">Первая координата х.</param>
/// <param name="y1">Первая коордмната у.</param>
/// <param name="angle">Угол поворота для вычисления координат.</param>
/// <param name="length">Длина линии.</param>
/// <param name="canvas">Канва, на которой проходит отрисовка.</param>
/// <param name="depth">Глубина рекурсии.</param>
/// <param name="coeff">Отношение длин отрезков (для дерева).</param>
/// <param name="leftCorner">Размер левого угла (для дерева).</param>
/// <param name="rightCorner">Размер правого угла (для дерева).</param>
/// <param name="diff">Расстояние между итерациями(для множества).</param>
public override void Draw(double x1, double y1, double angle, double length, Canvas canvas, int depth, double coeff, double leftCorner, double rightCorner, int diff)
{
if (depth != maxDepth)
{
double x2 = x1 + length;
double x3 = x2 - (x2 - x1) / 3;
CreateLine(canvas, (int)x1, (int)x2, (int)y1, (int)y1);
depth++;
Draw(x1, y1 + diff, angle, length / 3, canvas, depth, 0, 0, 0, diff);
Draw(x3, y1 + diff, angle, length / 3, canvas, depth, 0, 0, 0, diff);
}
}
}
}