You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mandelbrot转Julia集坐标公式错误求助:Julia集错位问题

Julia集坐标转换修正方案

问题根源

你的Julia集坐标转换逻辑和Mandelbrot的坐标系统脱节:既没有复用Mandelbrot的缩放/偏移参数逻辑,又叠加了多余的坐标计算,导致仅左下角小区域匹配,整体偏移错位。

修正后的坐标转换代码

确保Julia集的初始点(zx, zy)计算逻辑和Mandelbrot完全一致,同时正确映射窗口坐标到分形画布的坐标体系:

// 1. 将窗口鼠标坐标(800x600)等比例转换为分形画布坐标(400x300)
float fractal_x = mouse.x * (400.0f / 800.0f);
float fractal_y = mouse.y * (300.0f / 600.0f);

// 2. 复用Mandelbrot的缩放与偏移参数计算数学坐标
zx = (fractal_x / mandelbrot.get_zoom_x()) * mandelbrot.get_zoom_factor() - mandelbrot.get_x_offset();
zy = (fractal_y / mandelbrot.get_zoom_y()) * mandelbrot.get_zoom_factor() - mandelbrot.get_y_offset();

关键逻辑说明

  • 画布尺寸映射:分形类内部画布为400x300,但窗口是800x600,必须先将窗口坐标等比例缩放到分形画布尺寸,否则坐标缩放比例完全错误。
  • 参数同步复用:直接使用zoom_x/zoom_y(基础缩放系数)、zoom_factor(当前缩放倍数)、x_offset/y_offset(坐标偏移量),确保Julia集和Mandelbrot的坐标系统完全同步,缩放、平移操作会同时作用于两个分形。
  • 移除硬编码冲突:原代码中(mouse.x/800-0.5)*6这类硬编码范围与类内参数冲突,复用已有参数即可对齐坐标体系。

Julia集核心补充

Julia集的迭代公式是zₙ₊₁ = zₙ² + c,其中c是固定值(通常取自Mandelbrot集中鼠标点击位置的数学坐标),c值同样要用上述转换逻辑计算:

// 计算Julia集的固定参数c(从Mandelbrot鼠标位置获取)
float c_x = (fractal_x / mandelbrot.get_zoom_x()) * mandelbrot.get_zoom_factor() - mandelbrot.get_x_offset();
float c_y = (fractal_y / mandelbrot.get_zoom_y()) * mandelbrot.get_zoom_factor() - mandelbrot.get_y_offset();

内容的提问来源于stack exchange,提问作者NeKon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:26:05