gpt4 book ai didi

c - Mandelbrot PPM 绘图始终为黑色

转载 作者:行者123 更新时间:2023-11-30 15:12:34 25 4
gpt4 key购买 nike

我想用 C 将 Mandelbrot 绘制为 PPM 文件。我的代码可以工作,但我的绘图始终是黑色的。我有来自维基百科的代码。我成功的关键是思考“alfa”(我是这么认为的)。我不知道阿尔法应该是什么。这是我的代码:

#include <stdio.h>
#include <stdlib.h>

#define W 800
#define H 800

//rgb struct
struct RGB {
int r;
int g;
int b;
};
struct RGB picture[W][H];

void draw() {
int i, j, iteration, max_iteration, alfa, color;
float x, y, x0, y0, xtemp;

for(i=0;i<W;++i)
{
for(j=0;j<H;++j)
{
x0 = 1; //scaled x (e.g interval(-2.5, 1))
y0 = -1; //scaled y (e.g interval(-1, 1))
x = 0.0;
y = 0.0;
iteration = 0;
max_iteration = 1000;

while (x*x + y*y < 2*2 && iteration < max_iteration)
{
xtemp = x*x - y*y + x0;
y = 2*x*y + y0;
x = xtemp;
iteration = iteration+ 1;
alfa = x*y; //???
}

color = alfa * (iteration / max_iteration);

picture[i][j].r = color;
picture[i][j].g = color;
picture[i][j].b = color;
}
}
}

int main() {

//variables
int i,j;

draw();

FILE *fp;
fp = fopen("picture.ppm", "w");
fprintf(fp,"P3\n#test\n%d %d\n256\n", W, H);

for (i=0; i < W; ++i)
{
for (j=0; j < H; ++j)
{
fprintf(fp,"%d %d %d ", picture[i][j].r, picture[i][j].g , picture[i][j].b);
}
fprintf(fp, "\n");
}

fclose(fp);

return 0;
}

最佳答案

在这一行

color = alfa * (iteration / max_iteration);

除法iteration/max_iterationint除法,其结果始终为0(可能为1,如果迭代== max_iteration)。

尝试使用float,或者像这样重新排列

color = alfa * iteration / max_iteration;

删除括号。但您必须注意 int 范围没有被破坏。

话虽如此,您似乎并不确定 alfa 是什么。我建议 255 这样你就可以获得灰度图像。

关于c - Mandelbrot PPM 绘图始终为黑色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34980064/

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