java - 生成分形漩涡

标签 java algorithm graph fractals

<分区>

我需要使用算法 Iterated Function System 绘制分形漩涡.

Targeted Fractal Image

这个分形有系数:

0.745455 -0.459091  0.406061  0.887121 1.460279 0.691072 0.912675
-0.424242 -0.065152 -0.175758 -0.218182 3.809567 6.741476 0.087325

这是我的代码:

import java.awt.Graphics;
import javax.swing.JPanel;

public class Surface extends JPanel {
double a1 = 0.745455;
double b1 = -0.459091;
double d1 = 0.406061;
double e1 = 0.887121;
double c1 = 1.460279;
double f1 = 0.691072;
double p1 = 0.912675;

double a2 = -0.424242;
double b2 = -0.065152;
double d2 = -0.175758;
double e2 = -0.218182;
double c2 = 3.809567;
double f2 = 6.741476;
double p2 = 0.087325;

double x1(double x, double y) {
    return a1 * x + b1 * y + c1;
}

double y1(double x, double y) {
    return d1 * x + e1 * y + f1;
}

double x2(double x, double y) {
    return a2 * x + b2 * y + c2;
}

double y2(double x, double y) {
    return d2 * x + e2 * y + f2;
}

public void paint(Graphics g) {
    drawFractal(g);
}

void drawFractal(Graphics g) {
    double x1 = 300;
    double y1 = 300;
    double x2 = 0;
    double y2 = 0;
    g.fillOval(300 + (int) x1, 300 + (int) y1, 3, 3);
    for (int i = 0; i < 10000; i++) {
        double p = Math.random();
        if (p < 0.91675) {
            x2 = x1(x1, y1);
            y2 = y1(x1, y1);
            g.fillOval(300 + (int) x2, 300 + (int) y2, 3, 3);
            x1 = x2;
            y1 = y2;
        } else {
            x2 = x2(x1, y1);
            y2 = y2(x1, y1);
            g.fillOval(300 + (int) x2, 300 + (int) y2, 3, 3);
            x1 = x2;
            y1 = y2;
        }
    }
}
}

不幸的是,使用这段代码我得到了错误的图片:

Current Fractal Image

如果有人能指出我的错误就太好了。

最佳答案

您的生成似乎是正确的(即不要执行 x1 = x2 +300; y1 = y2 +300;),但您的问题是您超出了渲染目的的规模.这意味着很少有点落在图像的中心之外。

您的窗口是 [0..600]x[0..600]。尝试将 x2y2 乘以 50,以便呈现 [-6..6]x[-6..6] 区域而不是 [-300..300]x[-300..300] 空间区域。

请注意,绘制单个像素(作为自身的线)而不是 3x3 椭圆就足够了。

int xp = 300 + (int) (x2 * scale);
int yp = 300 + (int) (y2 * scale);
g.drawLine(xp, yp, xp, yp);

根据渲染的内容,您可能需要稍微调整比例以获得具有合理边界的整个图像。请注意,第二个转换偏移了 -6.7,因此 30 的比例应该是正确的。

另请注意,通过使用 x1 = x2 +300; y1 = y2 +300; 您更改转换并获得不同分形(以您期望的比例)。

关于java - 生成分形漩涡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14010810/

相关文章:

玩围棋的算法?

java - 在图中的两个节点之间寻找路径(存储通过的节点)

algorithm - 找到覆盖所有检查点的路径

java - 在jung中显示选定的节点名称

java - 识别 wav 之间模式的算法

java - firstLast Java链表/节点

java - 递归修改用给定注释注释的对象中的所有字段

java - 我正在尝试编写一种方法,对数组中的相邻单元格进行求和,并用获得的值填充第二个数组中的位置

java - GSON读入数组类元素

java - LeetCode 中的递归和回溯是如何工作的?