Мне неизвестно, какие из существующих libs делают то, что вы хотите. если вы хотите закодировать его сами, вот мои мысли. сложность в основном заключается в масштабировании, потому что в противном случае вы можете предварительно вычислить все изображение. Я предполагаю, что лучшим методом является иерархическая предварительная вычислительная техника. например, вы можете заранее вычислить:
pre-compute(region r)
l = the list of lines intersecting with r
if l has less than T1 number of lines:
pre-compute the image in r with l;
else
divide r evenly into four subregions r1,r2,r3,r4
pre-compute(r1)
pre-compute(r2)
pre-compute(r3)
pre-compute(r4)
Список линий, пересекающихся с какой-либо области также можно кэшировать. Вы можете кэшировать предварительно вычисленные изображения и списки линий в квадратном дереве. Если вы добавляете/удаляете строки, вы также можете поэтапно делать это в дереве. тогда, когда вы рисуете, можно использовать следующий алгоритм:
draw(region r):
if r is a subset of a pre-computed region:
draw r using the pre-computed image
else
if r is smaller than T2:
l = the list of lines intersecting with r
if l has less than T1 number of lines:
draw r with l
return
divide r evenly into four regions r1, r2, r3, r4
draw(r1)
draw(r2)
draw(r3)
draw(r4)
костыль в этом алгоритме может быть в выборе правильного порогового значения T1, T2, который вы могли бы быть в состоянии избежать, сделав кэш-забывающий алгоритм. пожалуйста, дайте мне знать, если у вас возникнут дополнительные вопросы.
Что можно сказать о OpenGL на C или Java? Я бы рекомендовал использовать пакетные методы, которые принимают массивы, чтобы вы вызывали собственный метод только один раз и перерабатывали любые объекты, которые вы могли бы создать. То же самое можно было бы достичь с помощью аппаратного ускоренного холста. – Tom