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
相关产品推荐
相关产品推荐

