Julia集渲染代码 我正在做逃生时间分形,作为我的第十二级项目,用C++编写,使用简单的图形,h库已经过时,但似乎已经足够了。 生成Mandelbrot集的代码似乎是可行的,我假设Julia集是相同的变体。代码如下: (这里,fx和fy只是将实际复杂坐标(如(-0.003,0.05))转换为屏幕上像素的实际值的函数。)

Julia集渲染代码 我正在做逃生时间分形,作为我的第十二级项目,用C++编写,使用简单的图形,h库已经过时,但似乎已经足够了。 生成Mandelbrot集的代码似乎是可行的,我假设Julia集是相同的变体。代码如下: (这里,fx和fy只是将实际复杂坐标(如(-0.003,0.05))转换为屏幕上像素的实际值的函数。),c++,iteration,complex-numbers,fractals,C++,Iteration,Complex Numbers,Fractals,有人能解释一下我遗漏了什么吗?我想主要的问题是变量I(虚部)被循环变量I错误地覆盖了。那么这条线呢 y= 2*x*y + i; 给出了不正确的结果。此变量应重命名为,例如im。更正后的版本附在下面,因为我没有图形。h,我使用屏幕作为输出 #include <iostream> using namespace std; #define WIDTH 40 #define HEIGHT 60 /* real to screen */ #define fx(x) ((int) ((x

有人能解释一下我遗漏了什么吗?

我想主要的问题是变量
I
(虚部)被循环变量
I
错误地覆盖了。那么这条线呢

y= 2*x*y + i;
给出了不正确的结果。此变量应重命名为,例如
im
。更正后的版本附在下面,因为我没有图形。h,我使用屏幕作为输出

#include <iostream>
using namespace std;

#define WIDTH  40
#define HEIGHT 60

/* real to screen */
#define fx(x) ((int) ((x + 2)/4.0 * WIDTH))
#define fy(y) ((int) ((2 - y)/4.0 * HEIGHT))

/* screen to real */
#define gx(i) ((i)*4.0/WIDTH - 2)
#define gy(j) ((j)*4.0/HEIGHT - 2)

static void julia(int it, int pd)
{
  int p;
  long double re = -0.75, im = 0;
  long double x0 = 0, y0 = 0;

  cout << "Enter c" << endl;
  cin >> re >> im;
  for (int i = fx(-2.0); i <= fx(2.0); i++)
  {
      for (int j = fy(-2.0); j >= fy(2.0); j--)
      {
          long double x = gx(i), y = gy(j), t;
          int k = 0;

          while (x*x + y*y < 4 && k < it)
          {
              t = x*x - y*y + re;
              y = 2*x*y + im;
              x = t;
              k++;
          }
          p = (int) (k * pd);
          //setcolor(COLOR(colour[p][0],colour[p][1],colour[p][2]));
          //putpixel(i,j,getcolor());
          cout << p; // for ASCII output
      }
      cout << endl; // for ASCII output
  }
}

int main(void)
{
  julia(9, 1);
  return 0;
}

你能告诉我你是如何用这些图形来显示图像的吗

//setcolor(COLOR(COLOR[p][0]、COLOR[p][1]、COLOR[p][2]);
//putpixel(i,j,getcolor())

你们有一台工作的曼德布罗特发电机吗?将其修改为Julia需要将变量更改为常量。如果减少循环变量,这个
(int j=fy(-2);j>=fy(2);j--)将如何循环?这将说明
fy(-2)
大于
fy(2)
@karatedog no,在BGI窗口中,(0.0)是左上角,(宽度,高度)是右下角。所以要从y=-2变为y=+2,必须减小j的值。是的,我有一个工作的Mandelbrot集生成器。它的值是多少?我建议使用通常的方法,当您调试模拟每个输入数据并使用常量值而不是变量(比如用50替换
it
)@karatedog时,
it
是用户输入的任何值,在b/w 1到1275的任何位置。我有一个1275种颜色的数组[需要改进,但目前效果很好[mandelbrot集合]。如果你有一个工作的mandelbrot集合,那么在迭代中修改这个部分:
z=z^2+c
z=z^2+
,你就完成了。我这里有一个不同问题的答案(但你会明白的):是的,这正是问题所在(我这方面非常愚蠢)。非常感谢你指出这一点@上海。不客气。始终享受一点分形程序。:-)
y= 2*x*y + i;
#include <iostream>
using namespace std;

#define WIDTH  40
#define HEIGHT 60

/* real to screen */
#define fx(x) ((int) ((x + 2)/4.0 * WIDTH))
#define fy(y) ((int) ((2 - y)/4.0 * HEIGHT))

/* screen to real */
#define gx(i) ((i)*4.0/WIDTH - 2)
#define gy(j) ((j)*4.0/HEIGHT - 2)

static void julia(int it, int pd)
{
  int p;
  long double re = -0.75, im = 0;
  long double x0 = 0, y0 = 0;

  cout << "Enter c" << endl;
  cin >> re >> im;
  for (int i = fx(-2.0); i <= fx(2.0); i++)
  {
      for (int j = fy(-2.0); j >= fy(2.0); j--)
      {
          long double x = gx(i), y = gy(j), t;
          int k = 0;

          while (x*x + y*y < 4 && k < it)
          {
              t = x*x - y*y + re;
              y = 2*x*y + im;
              x = t;
              k++;
          }
          p = (int) (k * pd);
          //setcolor(COLOR(colour[p][0],colour[p][1],colour[p][2]));
          //putpixel(i,j,getcolor());
          cout << p; // for ASCII output
      }
      cout << endl; // for ASCII output
  }
}

int main(void)
{
  julia(9, 1);
  return 0;
}
0000000000000000000000000000000000000000000000000000000000000
0000000000000000000001111111111111111111000000000000000000000
0000000000000000011111111111111111111111111100000000000000000
0000000000000001111111111111111111111111111111000000000000000
0000000000000111111111111122222222211111111111110000000000000
0000000000011111111111122222349432222211111111111100000000000
0000000001111111111112222233479743322222111111111111000000000
0000000011111111111222222334999994332222221111111111100000000
0000000111111111112222223345999995433222222111111111110000000
0000011111111111122222234479999999744322222211111111111100000
0000011111111111222222346899999999986432222221111111111100000
0000111111111111222223359999999999999533222221111111111110000
0001111111111112222233446999999999996443322222111111111111000
0011111111111112222233446999999999996443322222111111111111100
0011111111111122222333456899999999986543332222211111111111100
0111111111111122223334557999999999997554333222211111111111110
0111111111111122233345799999999999999975433322211111111111110
0111111111111122233457999999999999999997543322211111111111110
0111111111111122334469999999999999999999644332211111111111110
0111111111111122345999999999999999999999995432211111111111110
0111111111111122379999999999999999999999999732211111111111110
0111111111111122345999999999999999999999995432211111111111110
0111111111111122334469999999999999999999644332211111111111110
0111111111111122233457999999999999999997543322211111111111110
0111111111111122233345799999999999999975433322211111111111110
0111111111111122223334557999999999997554333222211111111111110
0011111111111122222333456899999999986543332222211111111111100
0011111111111112222233446999999999996443322222111111111111100
0001111111111112222233446999999999996443322222111111111111000
0000111111111111222223359999999999999533222221111111111110000
0000011111111111222222346899999999986432222221111111111100000
0000011111111111122222234479999999744322222211111111111100000
0000000111111111112222223345999995433222222111111111110000000
0000000011111111111222222334999994332222221111111111100000000
0000000001111111111112222233479743322222111111111111000000000
0000000000011111111111122222349432222211111111111100000000000
0000000000000111111111111122222222211111111111110000000000000
0000000000000001111111111111111111111111111111000000000000000
0000000000000000011111111111111111111111111100000000000000000
0000000000000000000001111111111111111111000000000000000000000
0000000000000000000000000000000000000000000000000000000000000