Dibuja rectángulos, círculos o polígonos arbitrarios en una matriz m x n

Quiero simular el flujo alrededor de los objetos en dos dimensiones. Por lo tanto, escribí un programa en C que usa las ecuaciones de Navier-Stokes para describir el movimiento de los fluidos. Ahora llegué al punto en el que realmente quiero más que solo colocar un rectángulo en el dominio de simulación. Para dibujar un rectángulo así, simplemente hago algo como:

for(int i=start_x; i<end_x; i++)
    for(int j=start_y; j<end_y; j++)
        M[i][j] = 1; // barrier cell = 1

Al hacer esto obtengo un bonito rectángulo. No sorpresa. Pero, ¿cuál sería un enfoque si quisiera simular el flujo alrededor de un círculo, una cruz, un triángulo, un perfil de ala o cualquier otro polígono arbitrario? ¿Hay una manera fácil de dibujar tales objetos 2D en una matrizM de tamañom x n?

Acabo de encontrar una manera fácil de dibujar casi cualquier forma que quiera. La respuesta de @Nominal Animal me inspiró a encontrar esta solución. Yo solo uso un.png archivo y convertirlo a un.pgm archivo usando el comandoconvert picture.png picture.pgm (usando Linux). En mi código solo necesito unas pocas líneas más:

FILE *pgmFile;
pgmFile = fopen("picture.pgm", "r");
for(int i=0; i<1024; i++){
    for(int j=0; j<1024; j++){
        int d = fgetc(pgmFile);
        if(d < 255){
            M[i][j] = 1; // barrier cell = 1
        }
    }
}
fclose(pgmFile);

Aquí uso una imagen de 1024 x 1024 píxeles. Si el valor del píxel es menor que 255 (no blanco), establezco el píxel deM[i][j] a 1. Aquí hay un resultado que obtuve con el logotipo Stack Overflow (el flujo viene de la izquierda):

Diagrama de velocidad, Re = 20000 (número de Reynolds)

Respuestas a la pregunta(5)

Su respuesta a la pregunta