Обновить

Комментарии 12

НЛО прилетело и опубликовало эту надпись здесь
Да, можно использовать и его. Разве что, придется сделать небольшую поправку: при вызове функции проверки принадлежности числа к множеству, нужно исправить 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 битно поддерживающие языки — проблемой осталась раскраски. Впрочем — у вас тоже не очень с этим (по моим личным эстетическим понятиям). В том плане, что оригинальный Мандельброт в синий уходит.

Может порамыслим над тем, как его покрасивее раскрасить? Допустим для начала как такая идея — попытаться сделать так, чтобы на каждом генерируемом экране цвета проходили весь спектр от красного до фиолетового? Само собой учитывая лишь видимые точки.
НЛО прилетело и опубликовало эту надпись здесь
Спасибо. Еще один повод для меня наконец-то взяться за изучение 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.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации