Задача состоит в том, чтобы выбрать правильный порог.Пиксели, где abs(f(x,y))
ниже порога, должны быть цветными.Пиксели выше порога должны быть белыми.
Проблема в том, что если пороговое значение слишком низкое, в местах, где ни один пиксель не находится точно на линии, появляются пропуски.С другой стороны, если порог слишком высок, линии расширяются в местах, где функция близка к нулю, и функция меняется медленно.
Так какой же правильный порог?Ответом является величина градиента , умноженная на радиус пикселя.Другими словами, пиксель должен быть цветным, когда
abs(f(x,y)) < |g(x,y)| * pixelRadius
. Причина в том, что величина градиента равна максимальному наклону поверхности (в данной точке).Таким образом, пересечение нуля происходит в пикселе, если наклон достаточно велик, чтобы уменьшить функцию до нуля внутри пикселя.
Это, конечно, только грубое приближение.Предполагается, что градиент существенно не изменяется в пределах области, ограниченной пикселем.Функция в вопросе достаточно хорошо соответствует этому предположению, за исключением правого верхнего угла.Обратите внимание, что на приведенном ниже графике в правом верхнем углу есть узоры Муара .Я полагаю, что это связано с ошибкой в моем расчете сглаживания: я не компенсирую быстро меняющийся градиент.
На приведенном ниже графике пиксели белого цвета, если
abs(f(x,y)) > |g(x,y)| * pixelRadius
В противном случаеинтенсивность пикселей - это число от 0 до 1, где 0 - черный, а 1 - белый:
intensity = abs(f(x,y)) / (|g(x,y)| * pixelRadius)