Я слышу, что Anjuta является довольно гладким для пользователей Gnome. Я играл немного с KDevelop, и это хорошо, но вид недостатка featurewise. Код:: Блоки также очень перспективны, и мне нравится этот одно лучшее.
Я бы порекомендовал вам использовать библиотеку геометрических алгоритмов, например CGAL . В особенности второй пример на странице «2D-полигоны» справочного руководства должен предоставить вам то, что вам нужно. Вы можете определить каждую «границу» как многоугольник и проверить, находятся ли определенные точки внутри многоугольников. По сути, это будет что-то вроде
for every y in raster grid
for every x in raster grid
for each defined polygon p
if point(x,y) is inside polygon p
pixel[X][Y] = inside_color[p]
. Я не уверен, что делать с external_color, потому что внешние области будут перекрываться, не так ли? В любом случае, глядя на ваш пример, каждая внешняя область может быть водой, поэтому вы можете просто выполнить окончательный
if pixel[X][Y] still undefined then pixel[X][Y] = water_value
(или, в качестве альтернативы, установить для пикселя [X] [Y] значение water_value перед итерацией по списку многоугольников)
Общий случай обработки такого рода Геометрия в векторной форме может быть довольно сложной, тем более что ничего в описываемой вами структуре не требует, чтобы геометрия была согласованной. Однако, поскольку вы просто хотите растеризовать ее, то рассмотрение проблемы как диаграммы Вороного из линейных сегментов может быть более надежным.
Аппроксимация диаграммы Вороного может быть выполнена графически в OpenGL, нарисовав каждый линейный сегмент как пару четырехугольников, составляющих форма палатки. Z-буфер используется для того, чтобы ближайший четырехугольник имел приоритет, и таким образом раскрашиваем пиксель на основе ближайшей линии. Разница здесь в том, что вы захотите раскрасить полигоны в зависимости от того, на какой стороне линии они находятся, а не в зависимости от того, какую линию они представляют. Хорошая статья, в которой обсуждается подобный алгоритм, - это работа Хоффа и др. Быстрое вычисление обобщенных диаграмм Вороного с использованием графического оборудования
Трехмерная геометрия будет выглядеть примерно так, как этот эскиз с 3 красными / желтыми сегментами и 1 синим / зеленым сегментом:
Эта процедура не требует от вас ничего преобразовывать в замкнутый цикл и не требует каких-либо библиотек сложной геометрии. Все обрабатывается z-буфером и должно быть достаточно быстрым, чтобы работать в реальном времени на любой современной видеокарте. Уточнение могло бы заключаться в использовании однородных координат, чтобы базы проецировались на бесконечность.
Я реализовал этот алгоритм в скрипте Python на http://www.pasteall.org/9062/python . Одно интересное предостережение заключается в том, что использование конусов для закрытия концов линий не сработало без искажения формы конуса, потому что конусы, представляющие конечные точки сегментов, боролись по оси z. Для предоставленного вами образца геометрии выходные данные выглядят следующим образом: