vb6 - Algoritmo de líneas de contorno
grid contour (1)
Esta pregunta es un poco obsoleta, pero también lo es mi experiencia: hice algo así hace casi 30 años.
Esto produce contornos simples en un mapa de bits:
- Calcule la intensidad de campo en cada punto de la cuadrícula (supongo que está tratando de trazar algo así como los contornos de los campos gravitacionales en función de las masas de los puntos).
- Colorea los espacios alternos entre las curvas de nivel (que aún no has obtenido) en dos colores alternativos. por ejemplo, si las líneas de contorno deben ser 100 unidades (de intensidad de campo) separadas, entonces elija el color de cada píxel en función de
ToInt(pixel_field_strength / 100) % 2
. - Rastree los bordes de los límites de color para producir contornos. Por ejemplo, si sus dos colores son blanco y negro, solo retendrá píxeles blancos adyacentes a un píxel negro.
Si solo está interesado en los resultados, use una biblioteca como se sugiere en los comentarios.
Puramente por nostalgia, encontré mi código BBC BASIC original. Todavía se ejecuta en modelb (un emulador de 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
Esto bien podría ser un duplicado, pero no pude encontrar algo específico para mi problema.
Tengo una cuadrícula xy en un cuadro de imagen. Cada celda de grilla tiene una masa específica. Me gustaría crear líneas de contorno en esta cuadrícula xy en función de la masa.
¿Alguien tiene alguna idea para un buen algoritmo para realizar esta tarea? Estoy tratando de hacer esto en VB6, pero cualquier algoritmo sería suficiente.
Editar
Tengo una grilla Quiero mostrar líneas de contorno basadas en la masa (IE, las celdas con más de un punto en ellas serán más pesadas en masa)