2014-01-08 4 views
1

Мне нужно нарисовать изображение, представляющее профиль высот таким образом, чтобы андроид рисовал изображение в скором времени. Это профиль высоты составляет 50 000 высоты или даже больше. Я использую AChartEngine, но для этого огромного количества линий не очень быстро рисовать и масштабировать. Есть ли какая-нибудь другая библиотека, подходящая для этого? Считаете ли вы, что рисунок .svg будет лучше?Как нарисовать чертеж тысяч линий эффективно?

Спасибо за ваш совет.

+0

Что можно сказать о OpenGL на C или Java? Я бы рекомендовал использовать пакетные методы, которые принимают массивы, чтобы вы вызывали собственный метод только один раз и перерабатывали любые объекты, которые вы могли бы создать. То же самое можно было бы достичь с помощью аппаратного ускоренного холста. – Tom

ответ

0

Мне неизвестно, какие из существующих 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, который вы могли бы быть в состоянии избежать, сделав кэш-забывающий алгоритм. пожалуйста, дайте мне знать, если у вас возникнут дополнительные вопросы.

Смежные вопросы