gpt4 book ai didi

c# - 牛顿分形的 1/4 只画出来了

转载 作者:太空狗 更新时间:2023-10-29 23:12:24 27 4
gpt4 key购买 nike

我在使用 F# 绘制 f(x) = x^3 - 1 的牛顿分形时遇到问题问题是我的程序似乎只绘制了分形右下方的 1/4,没有别的。由于实际绘制的区域是正确的,我认为问题可能出在窗体上的位图表示上

这是我得到的图像的链接 https://imgur.com/a/YPSYIk9

到目前为止我想出的代码:

open System
open System.Drawing
open System.Windows.Forms
open System.Numerics

let pi = 3.14159265359
let MaxCount = 50
let multCol = 15
let Tol = 0.5
let r1 = Complex(1.0, 0.0)
let r2 = Complex(-0.5, sin(0.66*pi))
let r3 = Complex(-0.5, -sin(0.66 * pi))

let createImage () =
let image = new Bitmap (800, 800,System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
let graphics = Graphics.FromImage(image)
let mutable maxMod = 0.0
for x = 0 to image.Width - 1 do
for y = 0 to image.Height - 1 do
let mutable z = Complex(float x , float y)
let mutable count = 0
while (count < MaxCount && Complex.Abs(z - r1) >= Tol && Complex.Abs(z - r2) >= Tol && Complex.Abs(z - r3) >= Tol) do
if(Complex.Abs(z) > 0.0) then
z <- z - (z*z*z - Complex(1.0,0.0))/(Complex(3.0,0.0) * z * z)
if(Complex.Abs(z) > maxMod) then
maxMod <- Complex.Abs(z)
count <- count + 1
let temp1 = Complex.Abs(z - r1)
let temp2 = Complex.Abs(z - r2)
let temp3 = Complex.Abs(z - r3)
if(Complex.Abs(z - r1) <= Tol) then
let Brush = new System.Drawing.SolidBrush(System.Drawing.Color.Red)
graphics.FillRectangle(Brush, new Rectangle(x,y,1,1))
if(Complex.Abs(z - r2) <= Tol) then
let Brush = new System.Drawing.SolidBrush(System.Drawing.Color.Blue)
graphics.FillRectangle(Brush, new Rectangle(x,y,1,1))
if(Complex.Abs(z - r3) <= Tol) then
let Brush = new System.Drawing.SolidBrush(System.Drawing.Color.Green)
graphics.FillRectangle(Brush, new Rectangle(x,y,1,1))
image.Save("redacted.png")

createImage()

任何人都可以提示我实际可能发生的问题吗?

最佳答案

它实际上看起来像您看到的是顶部 右而不是右下角,但它是上下颠倒的。您无法分辨,因为分形的右半部分关于 x 轴对称。

问题是您是根据标准笛卡尔计划绘制的,原点右上角有 (+, +),表格的方向是原点在左上角,坐标向右和向下递增。

要更正它,您需要将数学坐标转换为表单上的坐标,如下所示:

new Rectangle(x,y,1,1)

成为

new Rectangle(x - xmin,ymin - y,1,1)

其中 xminymin 是您正在绘制的区域的最小范围。并注意 x 和 y 坐标计算之间的差异,因为 y 维度也需要翻转。

关于c# - 牛顿分形的 1/4 只画出来了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50194358/

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