La clave para hacer que un esquema de diferencia finita funcione en una geometría irregular es tener una matriz de 'forma' con valores que denoten puntos fuera, dentro y en el límite del dominio. Digamos que teníamos una forma como esta:
000000001000000110000012100001221000122210012221001221000121000011000001000000000000
El dominio verdadero (donde están todas las entradas distintas de cero de la matriz) forma un triángulo apuntando hacia abajo. Los 1 representan puntos en el límite, mientras que los 2 representan puntos interiores (normalmente no conocidos). Podemos asignar números de nodo de la siguiente manera:
00000000−1000000−1−100000−11−10000−127−1000−13811−100−14912−100−1510−1000−16−10000−1−100000−1000000000000
Aquí, los -1 representan las ubicaciones de los límites. Luego, puede ejecutar un esquema de diferencia finita sobre todas las entradas en la matriz, pero use una instrucción if para ejecutar su esquema solo en los nodos interiores (del 1 al 12). Este enfoque no es la forma más eficiente de hacerlo, pero hará el trabajo ... si puede permitirse la memoria, podría ser bueno almacenar las entradas (i, j) de todos los nodos interiores y ejecutar un bucle for solo en esos nodos.
Para crear la geometría directamente, puede hacer una de dos cosas:
1. Cree una imagen en blanco y negro manualmente e impórtela a su programa (más fácil de implementar, pero imposible de refinar su resolución espacial dx o dy).
2. Escriba un código que cree representaciones discretas de las formas básicas que desee para cualquier resolución espacial que elija (más difícil de implementar, pero más robusta para esquemas generales de diferencias finitas de cualquier resolución espacial dx o dy).
Si desea obtener más información sobre cómo hacer esto, puede considerar ver estos videos:
Curso de gráficos por computadora NPTEL, Video 2 (Gráficos ráster)
Curso de gráficos por computadora NPTEL, Video 3 (Gráficos ráster, continuación) Mírelos
y avíseme si esto responde a su pregunta.