Я хочу моделировать поток вокруг объектов в двух измерениях. Поэтому я написал программу на C, которая использует уравнения Навье-Стокса для описания движения жидкостей. Теперь я пришел к тому, что на самом деле хочу больше, чем просто разместить прямоугольник в домене моделирования. Чтобы нарисовать такой прямоугольник, я просто делаю что-то вроде:
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
Выполняя это, я получаю красивый прямоугольник. Не удивительно. Но какой будет подход, если я хочу моделировать поток вокруг круга, крест, треугольник, профиль крыла или любой другой произвольный многоугольник? Есть ли простой способ нарисовать такие 2D-объекты в матрице M
размера m x n
?
Я просто нашел простой способ рисовать практически любую форму, которую я хочу. Ответ @Nominal Animal вдохновил меня найти это решение. Я просто использую файл .png
и конвертирую его в файл .pgm
с помощью команды convert picture.png picture.pgm
(используя Linux). В моем коде мне нужны только несколько строк:
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);
Здесь я использую изображение размером 1024 x 1024 пикселя. Если значение пикселя меньше 255 (не белый), чем я установил пиксель M[i][j]
в 1. Вот результат, который я сделал с логотипом (поток идет слева):
График скорости, Re = 20000 (число Рейнольдса)