Sierpinski三角形是具有等边三角形整体形状的分形和有吸引力的固定集。它递归地细分为较小的三角形。
方法:
- 在给定的代码段中,创建一个三角形,然后绘制出三个其他相邻的小三角形,直到终止条件检查该三角形的高度是否小于5个像素,然后返回真。
- 我们只需要验证给定的三角形是否小于5个像素,因为超出该范围三角形将开始在固定点收敛。
- 定义了计数器colorVal以响应三角形的美学需要,并且总而言之,它通过迭代每个三角形集来循环遍历所有可用的颜色。
- 使用这种方法,我们还可以进一步实现分形缩放,并假设以后提供无限缩放。
下面是上述方法的实现:
// C++ code to implement
// Sierpinski Triangle using Graphics
#include
#include
#include
#define Y 900
#define X 1600
// Defining a function to draw a triangle
// with thickness 'delta'
void triangle(float x, float y,
float h, int colorVal)
{
setcolor(colorVal % 15 + 1);
for (float delta = 0; delta > -5; delta -= 1) {
line(x - (h + delta) / sqrt(3),
y - (h + delta) / 3,
x + (h + delta) / sqrt(3),
y - (h + delta) / 3);
line(x - (h + delta) / sqrt(3),
y - (h + delta) / 3,
x,
y + 2 * (h + delta) / 3);
line(x,
y + 2 * (h + delta) / 3,
x + (h + delta) / sqrt(3),
y - (h + delta) / 3);
}
}
// Defining a function to draw
// an inverted triangle
// with thickness 'delta'
void trianglev2(float x, float y,
float h, int colorVal)
{
setcolor(colorVal % 15 + 1);
for (float delta = 0; delta > -1 + 5; delta -= 1) {
line(x - (h + delta) / sqrt(3),
y + (h + delta) / 3,
x + (h + delta) / sqrt(3),
y + (h + delta) / 3);
line(x - (h + delta) / sqrt(3),
y + (h + delta) / 3,
x,
y - 2 * (h + delta) / 3);
line(x,
y - 2 * (h + delta) / 3,
x + (h + delta) / sqrt(3),
y + (h + delta) / 3);
}
}
// A recursive function to draw out
// three adjacent smaller triangles
// while the height is greater than 5 pixels.
int drawTriangles(float x = X / 2,
float y = 2 * Y / 3,
float h = Y / 2,
int colorVal = 0)
{
if (h < 5) {
return 0;
}
if (x > 0 && y > 0 && x < X && y < Y) {
triangle(x, y, h, colorVal);
}
drawTriangles(x,
y - 2 * h / 3,
h / 2,
colorVal + 1);
drawTriangles(x - h / sqrt(3),
y + h / 3,
h / 2,
colorVal + 1);
drawTriangles(x + h / sqrt(3),
y + h / 3,
h / 2,
colorVal + 1);
return 0;
}
// Driver code
int main()
{
initwindow(X, Y);
trianglev2(X / 2, 2 * Y / 3, Y, 2);
drawTriangles();
getch();
closegraph();
return 0;
}
输出: