Этот вопрос немного устарел, но мой опыт таков: я сделал что-то подобное почти 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