gpt4 book ai didi

c - 低分辨率 Mandelbrot 分形不...足够高的分辨率?

转载 作者:行者123 更新时间:2023-12-04 05:17:50 25 4
gpt4 key购买 nike

好的,这是一个奇怪的问题,我遇到了问题(用 gcc 编译)

下面是用于命令提示符的 Mandelbrot 分形生成器的源代码。我以前做过这个,我想对自己进行速度测试,看看我能以多快的速度生成在命令提示符中实际生成 Mandelbrot 分形所需的代码。我经常这样做是为了好玩

无论如何,我遇到了一个新问题,我无法弄清楚问题是什么。当分形渲染时,无论我设置了多少次迭代或什么 escapeValue,它都将始终显示为椭圆形!它不应该这样做。

对于你们所有的 mandelbrot/cpp 极客,你能帮我找出为什么我没有得到更多的“mandelbrot”形状吗?

#include <stdio.h>
#include <math.h>

#define DOSWidth 80
#define DOSHeight 25

int iterations = 1024;
float escapeValue = 3.0f;

struct ivar {
ivar(float _x, float _i) {
x = _x;
i = _i;
}
void log() {printf("(%g%c%gi)", x, (i<0)?'-':'+', fabs(i));}
float magnitude() {return sqrtf(x*x+i*i);}
ivar square() {return ivar(x, i)*ivar(x, i);}

ivar operator + (ivar v) {return ivar(x+v.x, i+v.i);};
ivar operator - (ivar v) {return ivar(x-v.x, i-v.i);};
ivar operator * (ivar v) {return ivar(x*v.x-(i*v.i), x*v.i+i*v.x);};

float x, i;
};

struct rect {
rect(float _x, float _y, float _width, float _height) {
x = _x;y = _y;width = _width;height = _height;
}

void setCenter(float cx, float cy) {
x = cx-width/2.0f;
y = cy-width/2.0f;
}

void log() {printf("(%f, %f, %f, %f)", x, y, width, height);}

float x, y;
float width, height;
};

int main() {
rect region = rect(0, 0, 2.5f, 2.0f);
region.setCenter(0, 0);
float xSize = region.width / (float)DOSWidth;
float ySize = region.height / (float)DOSHeight;
for(int y=0;y<DOSHeight;y++) {
for(int x=0;x<DOSWidth;x++) {
ivar pos = ivar(x*xSize+region.x, y*ySize+region.y);
bool escapes = false;
for(int i=0;i<iterations;i++) {
if(pos.magnitude() > escapeValue) {
escapes = true;
break;
}
pos = pos.square();
}
if(escapes)printf(" ");
else printf("X");
}
}
}

谢谢,如果你走到这一步,感谢你的帮助!

最佳答案

你只是递归平方pos直到其幅度超过极限。那不会产生分形;它将产生一个单位圆。

您需要在每次迭代后将 (x,y) 坐标添加到平方值。见 Wikipedia .

编辑 :一些小的变化和voila .

关于c - 低分辨率 Mandelbrot 分形不...足够高的分辨率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14029538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com