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)
let count = isInMandelbrotSet( Complex.zero, (mapPlane (x, y, s, mx, my)), iter, 0)
0
Хотя нет, проблема даже не в этом. Необходимо изменить все конструкторы комплексных чисел, вместо
complex x1 x2 использовать Сomplex (x1, x2).
И более того, по всей видимости, комплексные числа из System.Numerics.Complex не поддерживают интерфейс System.IComparable.
complex x1 x2 использовать Сomplex (x1, x2).
И более того, по всей видимости, комплексные числа из System.Numerics.Complex не поддерживают интерфейс System.IComparable.
0
Хм. Интересное решение в плане цветов. В дестве, когда рисовал мандельброта (еще на паскале), проблем не было — цветов было мало, поотм когда перешёл на шарп и прочие 16/32 битно поддерживающие языки — проблемой осталась раскраски. Впрочем — у вас тоже не очень с этим (по моим личным эстетическим понятиям). В том плане, что оригинальный Мандельброт в синий уходит.
Может порамыслим над тем, как его покрасивее раскрасить? Допустим для начала как такая идея — попытаться сделать так, чтобы на каждом генерируемом экране цвета проходили весь спектр от красного до фиолетового? Само собой учитывая лишь видимые точки.
Может порамыслим над тем, как его покрасивее раскрасить? Допустим для начала как такая идея — попытаться сделать так, чтобы на каждом генерируемом экране цвета проходили весь спектр от красного до фиолетового? Само собой учитывая лишь видимые точки.
0
Спасибо. Еще один повод для меня наконец-то взяться за изучение F# и функционального программирования в целом.
0
Чуть чуть критики:
1) Постарайтесь писать в стиле F# isInMandelbrotSet (z, c, iter, count) можно написать sInMandelbrotSet z c iter count и тогда можно использовать каррирование с вашей функцией что порой очень полезно, так же на практике iter и count лучше перенести в начало функции, так же из-за возможности использования каррирования.
2) Ваша реализация isInMandelbrotSet немного режет глаз — лучше вынести рекурсию во внутреннюю функцию или попробовать переписать все на Seq. Мой вариант с внутренней рекурсией:
если хотите могу прикинуть как это выглядит на Seq.
Но вобщем статья написана очень хорошо — удачи вам на поприще FP
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
+2
Вы не правильно определяете множество Мандельброта :(
Ему принадлежит точка (-2,0), которую (как и многие другие) вы неоправданно исключили.
Критерием сходимости служит не попадание в квадрат «C1(1, 1i) и C2(-1, -1i)», а условие |Cn| <= 4.
Ему принадлежит точка (-2,0), которую (как и многие другие) вы неоправданно исключили.
Критерием сходимости служит не попадание в квадрат «C1(1, 1i) и C2(-1, -1i)», а условие |Cn| <= 4.
0
Sign up to leave a comment.
Осваиваем F#: построение красочного множества Мандельброта с навигацией и интеграция с C#