【问题标题】:Sierpinski Triangle in MATLABMATLAB 中的谢尔宾斯基三角形
【发布时间】:2018-07-01 12:05:47
【问题描述】:

我已经编写了以下代码,但我似乎遗漏了一些东西,我不确定它是什么:

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

这就是我得到的:

三角形

有人知道怎么解决吗?

【问题讨论】:

  • 怎么了?你期待什么?你必须在这里明确。我们真的不知道出了什么问题,因为您发布的数字正是代码所描述的。因此,您编写的代码与您想要编写的代码不同,但我们无法查看您的想法并猜测您想要编写的代码。
  • 如果您想要更多层的谢尔宾斯基三角形,那么您需要添加另一个循环,在循环内将当前点缩放sqrt(3) 并添加另一个随机rv。您重复此循环的次数越多,您获得的分形级别就越多。

标签: matlab fractals


【解决方案1】:

我看到两个问题:

  1. 您已在每次循环中将r 重置为一个随机值,然后执行了一个计算,将其置于图像中出现的三个子三角形之一中.而不是这样做,您应该每次都根据其先前的值重新定义r。这就是一般迭代背后的基本思想。

  2. 我不确定涉及平方根的计算是做什么用的。谢尔宾斯基三角形的基本计算只是将当前点r 移动到三角形的三个顶点之一的一半,这是随机选择的。这在您对mid_xmid_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

【讨论】:

  • 你可以把r = [rand() rand()];写成r=rand(1,2);
  • @SardarUsama 没错!然而,我试图严格遵守原始代码。
  • 感谢@MarkMcClure,这是一个很大的帮助。涉及平方根的计算是为了确保只选择三角形内的点,但我想这不是必需的。
  • @SardarUsama 我没有想到,但我会使用它,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多