Задача: Необходимо доработать алгоритм марширующих квадратов таким образом, чтобы соседние сегменты линий соединялись последовательно. Это нужно для правильного отображения типа линии на графике (solid. dash, ...).
Описание: Плагин X-Y Plot Region к математической программе SMath Studio. Исходники можно найти на сайте программы по ссылке: https://en.smath.com/forum/yaf_postst1774_X-Y-Plot-Region.aspx (см. svn sources).
Пример построения неявной кривой в программе приложен.
Текущий порядок сегментов линий зависит от последовательности сканирования заданной области определения функции (см. описание алгоритма марширующих квадратов и вторую приложенную картинку).
Доработать функцию ImplicitPlot2d() в файле XYPlot.cs. Можно выделить её в отдельную программу.
Результатом работы должен быть список массивов точек List{PointD[]}. В случае с примером приложенной функции (x^2+y^2-(sin(5*(x+y)))^2-(cos(4*(x-y)))^2) должно получиться 15 отдельных полилиний в области определения: x = (-1.5, 1.5), y = (-1.5, 1.5). В полилинии не должно быть разрывов, каждая должна состоять только из последовательных сегментов алгоритма марширующих квадратов, в порядке их следования вдоль кривой на графике.
Примечания: В качестве подсказки могу посоветовать привязать текущие найденные отрезки к конкретной ячейке (квадрату) и перебрать каждую соседнюю, помечая. В случае коллизии (кривая может самопересекаться) - либо объединять получающиеся наборы, либо добавлять общие сегменты в соседние наборы.
Дам любые пояснения по работе функции. Её работу также можно посмотреть под отладчиком в реально работающем приложении.