La chiave per far funzionare uno schema di differenze finite su una geometria irregolare è avere una matrice di "forma" con valori che denotino punti all'esterno, all'interno e al limite del dominio. Supponiamo che abbiamo una forma come questa:
000000001000000110000012100001221000122210012221001221000121000011000001000000000000
Il vero dominio (dove sono tutte le voci diverse da zero della matrice) forma un triangolo rivolto verso il basso. I 1 rappresentano i punti sul confine, mentre i 2 rappresentano i punti interni (di solito non noti) Possiamo assegnare i numeri di nodo come segue:
00000000- 1000000- 1- 100000- 11- 10000- 127- 1000- 13811- 100- 14912- 100- 1510- 1000- 16- 10000- 1- 100000- 1000000000000
Qui, -1 rappresentano le posizioni al contorno. Quindi, è possibile eseguire uno schema di differenze finite su tutte le voci nella matrice, ma utilizzare un'istruzione if per eseguire lo schema solo sui nodi interni (da 1 a 12). Questo approccio non è il modo più efficiente per farlo, ma porterà a termine il lavoro ... se puoi permetterti la memoria, potrebbe essere utile archiviare le voci (i, j) di tutti i nodi interni ed eseguire un ciclo for solo su quei nodi.
Per creare direttamente la geometria, è possibile eseguire una delle due operazioni seguenti:
1. Creare manualmente un'immagine in bianco e nero e importarla nel programma (più semplice da implementare, ma impossibile perfezionare la risoluzione spaziale dx o dy).
2. Scrivere un codice che crei rappresentazioni discrete delle forme di base desiderate per qualsiasi risoluzione spaziale scelta (più difficile da implementare, ma più robusta per schemi di differenze finite generali di qualsiasi risoluzione spaziale dx o dy).
Se vuoi saperne di più su come farlo, potresti considerare di guardare questi video:
Corso di computer grafica NPTEL, Video 2 (Grafica raster)
Corso di computer grafica NPTEL, Video 3 (Grafica raster, continua) Dai
un'occhiata e fammi sapere se questo risponde alla tua domanda.