この質問は少し古くなっていますが、私の経験もそうです: 私はほぼ 30 年前にこのようなことをしました。
これにより、ビットマップ上に単純な輪郭が生成されます。
- グリッド内の各ポイントでフィールド強度を計算します (ポイントの質量に基づいて重力場の等高線のようなものをプロットしようとしていると仮定しています)。
- 等高線の間の代替スペース (まだ取得していません) を 2 つの代替色で色付けします。たとえば、等高線が 100 単位 (電界強度) 離れている必要がある場合は、に基づいて各ピクセルの色を選択します
ToInt(pixel_field_strength / 100) % 2
。
- 色の境界のエッジをトレースして輪郭を作成します。たとえば、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