Программа расчета сферической поверхности

Программирование построения изолиний

В этом параграфе мы с вами снова вернемся к программированию получения графических изображений на Delphi. В §2.4.5 рассматривалась программа построения графика функции. На ее примере были описаны основные принципы получения графического изображения в Delphi. Теперь нашей задачей будет составление программы построения картины изолиний для поля температур.

 

Что такое изолинии

Рассмотрим подробнее понятие изолиний. Дадим определение изолинии.

Дана функция от двух переменных Z(x,y), определенная в некоторой области значений аргументов. Изолинией называется геометрическое место точек на плоскости X0Y, соответствующее постоянному значению функции Z.

Графическим изображением функции Z(x,y) является поверхность в трехмерном пространстве. Такие поверхности, показанные на рис.3.26, 3.30, были получены с помощью табличного процессора. Изолиния, соответствующая некоторому постоянному значению Z=Zc , представляет собой проекцию сечения поверхности Z(x,y) плоскостью Z=Zc.

В качестве примера рассмотрим сферическую поверхность радиуса R с центром в начале координат. Ее уравнение следующее:

x2 + y2 + z2=R2

Выразим из этого уравнения значение Z, как функцию от x, y :

 

(3.47)

 

 

Знак ‘+’ соответствует верхней полусфере, знак ‘–‘ соответствует нижней полусфере. Изолиниями такой функции являются концентрические окружности с центром в начале координат и радиусом от 0 до R. Построение одной изолинии показано на рис.3.31.

 

Теперь перейдем к программированию. План действий будет следующим.

1. Составим программу вычисления дискретных значений на прямоугольной сетке функции (3.47) с сохранением в файле полученного числового массива.

2. Составим программу построения картины изолиний для функции Z(x,y), сохраненной в дискретном виде в файле, в результате выполнения п.1.

 

Дискретное представление поверхности


Примем . Будем строить картину изолиний верхней части сферической поверхности (Z>0) в пределах квадратной области -1≤ x ≤ 1, -1≤ y ≤1. Такая область будет представлять собой вписанный квадрат в окружность, получающуюся при пересечении сферы с плоскостью X0Y, как показано на рис.3.32.

На квадратную область накладываем прямоугольную сетку размером N×M, где N – число шагов по оси X, M - число шагов по оси Y. В дальнейшем будем называть ее расчетной сеткой. Значения шагов по X и по Y равны, соответственно:

hx=2/N, hy=2/M.

Если N=M, то шаги одинаковые и ячейки сетки квадратные.

Координаты узлов сетки вычисляются по следующим формулам:

xj= –1+jhx, j=0,..,N

yi= –1+ihy, i=0,..,M

 

Для получения дискретного представления верхней половины сферической поверхности, в каждом узле сетки вычисляется значение функции Z по формуле (3.47). Получим расчетную формулу:

(3.48)

 

Множество значений функции Z образует матрицу {Zi,j} , i=0,..,M, j=0,..,N

 

Программа расчета сферической поверхности

Ниже приведена программа на Паскале для расчета поверхности верхней полусферы.

Program Polusfera;

Const M=50; N=50;//Параметры размера сетки

Var I,j: integer;

Z: array[1..M,1..N] of real; //Массив расчетных значений ф-ии Z

x,y,hx,hy: real;

Flt: file of real; //файловая переменная

begin

Assign(Flt, ‘F:\temp\Tmas.dat’); //Назначение файла

Rewrite(Flt); //Открытие файла для записи

hx:=2/N; hy:=2/M; //Расчет шагов по X и по Y

//Вычисление массива Z

for i:=1 to M do

begin

y:=-1+hy*I;

for j:=1 to N do

begin

x:=-1+hx*j;

Z[I,j]:=sqrt(2-x*x-y*y)

end

end;

//Запись массива в файл поэлементно

for i:=1 to M do

for j:=1 to N do write(Flt, Z[I,j]);

close(Flt);

Writeln(‘Работа программы закончена’)

end.

Новым для вас элементом в этой программе является использование типизированного файла. Чтобы вспомнить, как организуется ввод данных из файла и вывод в файл, посмотрите еще раз §2.2.4 нашего учебника. Там описана работа с текстовыми файлами, которые хранят любые данные в символьном формате.

Если же требуется хранить в файле данные в том же формате, в каком они хранятся в оперативной памяти, то в таком случае используются типизированные файлы. Файловая переменная, связываемая с типизированным файлом, описывается так:

Var <переменная> : file of <тип сохраняемых данных>.

В рассматриваемой программе используется файловая переменная Flt, которая описана следующим образом:

Var Flt: file of real;

Запись в типизированный файл производится оператором

write(<файловая переменная>, <список вывода>)

Чтение из типизированного файла производится оператором:

Read((<файловая переменная>, <список ввода>)

При использовании типизированных файлов вместо текстовых для сохранения массива вещественных чисел, обычно значительно сокращается объем получаемого файла.