确定给定点(x, y)是否在曼德尔布罗集中的函数

发布于 2024-11-01 04:11:08 字数 228 浏览 4 评论 0原文

因此,给定任何点 (a + ib),如果该点位于 mandelbrot 集中,则该函数将返回 1;如果不在 n 次迭代中,则该函数将返回 0。

我在尝试编写此函数时遇到困难,尤其是对于复数。谁能帮助我或给我一些开始的建议?

到目前为止我只能想到一种方法来确定实数(任何x,y = 0)是否在mandelbrot集中。

编辑:抱歉忘记说我正在用 C 进行编码,不过我主要是在寻找一些伪代码的想法。

So given any point (a + ib), the function will return 1 if it is in the mandelbrot set or 0 if not for n amount of iterations.

I'm having difficulties trying to code this function, especially with the complex numbers. Can anyone help me or give some advice for me to start?

So far I can only think of a way to determine if a real number (any x, y = 0) is in the mandelbrot set.

EDIT: Sorry forgot to say that I'm coding in C, I'm looking for some psuedocode ideas mostly though.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

泪之魂 2024-11-08 04:11:08

该集合的维基百科页面有一些伪代码,可以完成基本工作,并暗示您可以采取这样的项目的许多方向中的一些方向。理解复杂的数学是关键;传统上将复数的实部和虚部保留为一对双精度数,并手动或作为宏对它们执行所需的任何操作。 (现在,如果您的编译器使用 C99,您可以使用 complex 类型,但是这有什么乐趣...?:-))

The Wikipedia page on the set has some pseudocode that does the basic job, and hints at some of the many directions in which you can take such a project. Understanding complex math is the key; it is traditional to keep the real and imaginary components of a complex as a pair of doubles and implement whatever operations you need on them by hand or as macros. (These days you can use the complex type if your compiler speaks C99, but where's the fun in that...? :-) )

月亮是我掰弯的 2024-11-08 04:11:08

您需要重复计算复数的平方和相加:

double a = real input component;
double b = imag input component;

double zReal = a;
double zImag = b;
for(int i = 0; i< LIMIT; i++){
   double temp = zReal;
   zReal = zReal * zReal - zImag * zImag;
   zImag = 2 * temp * zImag;
   if(zReal * zReal + zImag * zImag > 4){
      return 0;
   }
}
return 1;

You need to repeatedly square and add a complex number:

double a = real input component;
double b = imag input component;

double zReal = a;
double zImag = b;
for(int i = 0; i< LIMIT; i++){
   double temp = zReal;
   zReal = zReal * zReal - zImag * zImag;
   zImag = 2 * temp * zImag;
   if(zReal * zReal + zImag * zImag > 4){
      return 0;
   }
}
return 1;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文