我已经写了以下代码,但是我似乎缺少了一些东西,我不确定它是什么:
axis off
hold on
for i = 1:10000
r = [rand() rand()];
rp = [(1 - sqrt(r(1))) * -1 + (sqrt(r(1)) * (1 - r(2))) * 0 + (sqrt(r(1)) * r(2)) * 1,
(1 - sqrt(r(1))) * 0 + (sqrt(r(1)) * (1 - r(2))) * sqrt(3) + (sqrt(r(1)) * r(2)) * 0];
v1 = [-1 0 1];
v2 = [0 sqrt(3) 0];
num = randi([1 3], 1);
rv = [v1(num) v2(num)];
mid_x = (rp(1) + rv(1))/2;
mid_y = (rp(2) + rv(2))/2;
plot(mid_x, mid_y, '.r', 'MarkerSize', 0.000001)
end
这就是我要得到的:
三角形
有人知道如何解决吗?
答案 0 :(得分:1)
我看到两个问题:
您每次在循环中都将r
重置为随机值,并且 then 进行了一次计算,将其放置在出现在下面的三个子三角形之一中你的形象。而不是这样做,您应该每次根据其先前值重新定义r
。这通常是迭代背后的基本思想。
我不确定涉及平方根的计算用于什么。 Sierpinski三角形的基本计算只是将当前点r
移动到一半随机选择的三角形的三个顶点之一的一半。正确定义了mid_x
和mid_y
。
考虑到所有这些,我们得到的东西看起来像这样:
axis off
hold on
r = [rand() rand()]; % Define initial value of r outside the loop
v1 = [-1 0 1];
v2 = [0 sqrt(3) 0];
for i = 1:10000
num = randi([1 3], 1);
rv = [v1(num) v2(num)];
mid_x = (r(1) + rv(1))/2;
mid_y = (r(2) + rv(2))/2;
r = [mid_x mid_y]; % Redefine r each time through the loop
plot(mid_x, mid_y, '.r', 'MarkerSize', 0.000001)
end