Детали процедуры очевидны; формулы, аналогичные
Детали процедуры очевидны; формулы, аналогичные (7.44), имеют вид:
(7.45)
После прохождения всех горизонтальных и вертикальных линий сетки находятся все те точки на этих линиях, в которых потенциал равен
. Проведя — мысленно или на бумаге — кривую, плавно проходящую через ближайшие точки, получаем искомую изолинию (разумеется лишь в том случае, если значение
выбрано разумно и такая линия есть в пределах рассматриваемой области). Затем берем другие значения
и повторяем указанную процедуру, получая таким образом семейство изолиний.
Приведенная ниже программа реализует указанные построения. Предполагается, что все заряды лежат в одной плоскости, и изолинии строятся тоже лишь в этой плоскости.
Программа 149.
Программа построения линий равного потенциала.
Program Potential;
Uses Crt, Graph;
Const N = 100; (Размер сетки NxN}
Var X, У, Q, G : Array[1..10] Of Real; F : Array[0..N, 0..N] Of Real;
I, J, M, L, K: Integer; A, B, R: Real;
Begin
WriteLn('Сколько зарядов? (не более 10)'); ReadLn(K);
Write('Ведите координаты x, у и величины зарядов q');
WriteLn('(координаты - в диапазоне 0-1)');
For I := 1 То К Do
Begin Write('х[', I, ']=');
ReadLn(X[I]); Write('y[', I, ']='); ReadLn(Y(I]);
Write('q[', I, ']= '); ReadLn(Q[I])
End;
For I := 0 To N Do
For J := 0 To N Do
For M := 1 To K Do
Begin
R := Sqrt(Sqr(I / N - X[M]) + Sqr(J / N - Y[M]));
If R>=1E-6 Then F(I,J]:= F(I,J]+Q[M]/R Else F[I,J]:=1E+8
End;
Write('Сколько построить изолиний? (не более 10)'); ReadLn(L);
WriteLn('Введите значения потенциала g для построения изолиний');
For I := 1 То L Do
Begin Write ('g[', I, ']='); ReadLn(G(I]) End;
DetectGraph(I, J); InitGraph(I, J, ");
For I := 1 To К Do
Begin
A := X[I] * GetMaxX; В := (1 - Y[I]) * GetMaxY;
Circle(Round(A), Round(B), 4); FloodFill(Round(A), Round(B),
GetColor) ;
End;
For M := 1 To L Do
Begin
B := G[M]; SetColor(M);
For I := 0 To N Do
For J := 0 To N - 1 Do
If (F[I, J] - B) * (F[I, J + 1] - В) < О
Содержание Назад Вперед