Алгоритм контурных линий - PullRequest
3 голосов
/ 11 октября 2011

Это вполне может быть дубликат, но я не могу найти что-то конкретное для моей проблемы.

У меня есть сетка xy в графическом окне. Каждая ячейка сетки имеет определенную массу. Я хотел бы создать контурные линии на этой сетке xy на основе массы.

У кого-нибудь есть идеи по поводу хорошего алгоритма для выполнения этой задачи? Я пытаюсь сделать это в VB6, но подойдет любой алгоритм.

Редактировать

Контурная сетка

У меня есть сетка. Я хочу отображать контурные линии, основанные на массе (т.е., ячейки с более чем одной точкой в ​​них будут тяжелее по массе)

1 Ответ

1 голос
/ 14 января 2012

Этот вопрос немного устарел, но мой опыт таков: я сделал что-то подобное почти 30 лет назад.

Это создает простые контуры на растровом изображении:

  • Рассчитайте напряженность поля в каждой точке сетки (я предполагаю, что вы пытаетесь построить что-то вроде контуров гравитационного поля на основе массы точек).
  • Раскрасьте альтернативные пробелы между контурными линиями (которых у вас еще нет) в два альтернативных цвета. например если контурные линии должны быть на расстоянии 100 единиц (напряженности поля), тогда выберите цвет каждого пикселя на основе ToInt(pixel_field_strength / 100) % 2.
  • Проследите края цветовых границ, чтобы получить контуры. Например, если ваши два цвета - белый и черный, оставляйте только белые пиксели рядом с черным пикселем.

Если вас просто интересуют результаты, используйте библиотеку, как это предлагается в комментариях.

Чисто ради ностальгии я нашел свой оригинальный код BBC BASIC. Он по-прежнему работает на modelb (эмулятор BBC Micro).

   10 REM THIS COMES WITH NO WARRANTY!
   20  
   30 REM Gravity field
   40  
   50 MODE 1
   60 PROCsetup
   70 FOR Y%=300 TO 900 STEP 4
   80   FOR X%=200 TO 800 STEP 4
   90     R=LOG(FNforce(X%,Y%))
  100     GCOL0,((R*10) MOD 2)+1
  110     PLOT69,X%,Y%
  120     NEXT
  130   NEXT
  140 PROCcontour
  150 VDU19,1,0,0,0,0
  160 VDU19,2,0,0,0,0
  170 END
  180 DEFPROCsetup
  190 N%=5
  200 DIM X%(N%),Y%(N%),M%(N%)
  210 FOR P%=1 TO N%
  220   READ X%(P%),Y%(P%),M%(P%)
  230   NEXT
  240 ENDPROC
  250 DATA 625,625,1000000
  260 DATA 425,725,1000000
  270 DATA 475,425,1000000
  280 DATA 375,575,1000000
  290 DATA 725,525,1000000
  300 DEFFNforce(X,Y)
  310 P=0
  320 FOR P%=1 TO N%
  330   DX=X%(P%)-X:DY=Y%(P%)-Y
  340   R=SQR(DX*DX+DY*DY)
  350   P=P+M%(P%)/R
  360   NEXT
  370 =P
  380 DEFPROCcontour
  390 GCOL0,3
  400 FOR Y%=300 TO 900 STEP 4
  410   FOR X%=200 TO 800 STEP 4
  420     IF POINT(X%,Y%)=1 AND (POINT(X%+4,Y%)=2 OR POINT(X%-4,Y%)=2 OR POINT(X%,Y%+4)=2 OR POINT(X%,Y%-4)=2) THEN PLOT69,X%,Y% 
  430     NEXT
  440   NEXT
  450 ENDPROC
...