Pull to refresh

Comments 12

UFO just landed and posted this here
Да, можно использовать и его. Разве что, придется сделать небольшую поправку: при вызове функции проверки принадлежности числа к множеству, нужно исправить Complex.Zero на Complex.zero:

let count = isInMandelbrotSet( Complex.zero, (mapPlane (x, y, s, mx, my)), iter, 0)
Хотя нет, проблема даже не в этом. Необходимо изменить все конструкторы комплексных чисел, вместо
complex x1 x2 использовать Сomplex (x1, x2).

И более того, по всей видимости, комплексные числа из System.Numerics.Complex не поддерживают интерфейс System.IComparable.
Что логично, так как сравнение на больше/меньше для комплексных чисел не определяется.
Хм. Интересное решение в плане цветов. В дестве, когда рисовал мандельброта (еще на паскале), проблем не было — цветов было мало, поотм когда перешёл на шарп и прочие 16/32 битно поддерживающие языки — проблемой осталась раскраски. Впрочем — у вас тоже не очень с этим (по моим личным эстетическим понятиям). В том плане, что оригинальный Мандельброт в синий уходит.

Может порамыслим над тем, как его покрасивее раскрасить? Допустим для начала как такая идея — попытаться сделать так, чтобы на каждом генерируемом экране цвета проходили весь спектр от красного до фиолетового? Само собой учитывая лишь видимые точки.
UFO just landed and posted this here
Спасибо. Еще один повод для меня наконец-то взяться за изучение F# и функционального программирования в целом.
Чуть чуть критики:
1) Постарайтесь писать в стиле F# isInMandelbrotSet (z, c, iter, count) можно написать sInMandelbrotSet z c iter count и тогда можно использовать каррирование с вашей функцией что порой очень полезно, так же на практике iter и count лучше перенести в начало функции, так же из-за возможности использования каррирования.
2) Ваша реализация isInMandelbrotSet немного режет глаз — лучше вынести рекурсию во внутреннюю функцию или попробовать переписать все на Seq. Мой вариант с внутренней рекурсией:
let isInMandelbrotSet count iter z c =
let rec recur (curZ:Complex) step=
if (cMin < z) && (z > cMax) && (step < iter) then recur (curZ * curZ + c) (step+1)
else step
recur z count

если хотите могу прикинуть как это выглядит на Seq.
Но вобщем статья написана очень хорошо — удачи вам на поприще FP
Да еще 3 копейки
module Fractal — создает в IL статический класс с именем Fractal, чтобы указать namespace надо написать: namespace MyName.MyCoolLib в начале файла.
Спасибо за конструктивную критику!
Вы не правильно определяете множество Мандельброта :(
Ему принадлежит точка (-2,0), которую (как и многие другие) вы неоправданно исключили.
Критерием сходимости служит не попадание в квадрат «C1(1, 1i) и C2(-1, -1i)», а условие |Cn| <= 4.
Забыл про квадрат у модуля, правильно: |Cn| <= 2.
Sign up to leave a comment.

Articles