Исследование и моделирование с помощью компьютера электрических полей

этого заряда. Или:

[pic]

Эквипотенциальные поверхности

Если разность потенциалов между двумя точкам, равна нулю, то эти точки

лежат на одной линии, называемой эквипотенциалью на плоскости или

эквипотенциальной поверхностью в пространстве.

Итак, эквипотенциальной поверхностью называют такую поверхность, в каждой

точке которой потенциалы равны.

При движении электрического заряда по эквипотенциальной поверхности, работа

кулоновских сил равна нулю. Вследствие этого эквипотенциальная поверхность

в каждой своей точки перпендикулярна вектору напряженности в данной точке.

Докажем это.

В самом деле, ?A=F?lcos?. Если ?A=0, при F?0 и l?0, то cos?=0,

следовательно, ?=?/2. ?

Кроме того, вектор напряженности направлен в сторону уменьшения потенциала.

Особенно хорошо это видно на примере одиночного заряда.

Подобно силовым линиям, эквипотенциальные поверхности качественно

характеризуют распределение поля в пространстве.

Компьютерное моделирование

В дальнейших пунктах я хочу рассказать о возможностях программы и дать

краткие описания алгоритмам, реализованным в программе. Описание алгоритмов

носит, в основном, общий, ознакомительный характер, и не содержит

углублений в область информатики.

Моделирование силовых линий

Итак, нам известно, что в каждой точке линии напряженности вектор

напряженности направлен по касательной к этой линии. То есть, фактически,

нам надо знать направление вектора напряженности в данной точке

пространства.

Направление вектора можно просчитать с помощью метода координат:

соответствующие координаты вектора суммы равны сумме соответствующих

координат векторов-«слагаемых». Таким образом, для направления вектора мы

получаем двойку чисел (x; y), которые являются координатами радиус-вектора

суммы.

Просчитав направление результирующего вектора напряженности, из данной

точки строим линию, с таким же направлением, как и вектор напряженности. На

данной линии от данной точки по направлению вектора напряженности

откладываем расстояние h. Для большей точности надо сделать так, чтобы h>0,

однако тогда построение займет достаточно много времени, поэтому необходимо

найти такое h, чтобы отношение «качество-время» было бы оптимальным.

Отложив величину h, мы получаем следующую точку, с которой проделываем те

же самые операции.

Необходимо также учитывать, что для положительных зарядов направление

откладывания величины h и вектора напряженности совпадают, а для

отрицательных зарядов эти направления противоположно направлены.

Моделирование эквипотенциальных линий

Для построения эквипотенциальных линий можно было бы пользоваться тем

свойством, что эквипотенциальные линии перпендикулярны линиям

напряженности, однако этот метод дает достаточно большую погрешность,

которая возникает и накапливается из-за конкретного, отличного от 0

значения h (см. пункт «Моделирование линий напряженности»).

Поэтому плоскость можно разбить на какую-либо сетку, причем сторону

квадрата сетки надо постараться взять как можно наименьшей. Для экрана

такая сторона равняется одному пикселю.

Пусть нам дана точка, через которую следует построить эквипотенциальную

линию, тогда мы вычисляем потенциал в четырех соседних клетках сетки и

переходим в ту точку (клетку), для которой разность потенциалов с данной

точкой наименьшая. Теперь и нас есть другая точка, повторяем те же

операции, с одним лишь изменением: разность потенциалов должна быть

наименьшей не с предыдущей точкой, а с первоначальной.

Таким образом мы продолжаем строить линию до тех пор, пока не вернемся в

первоначальную точку.

Возможности программы

Программа может применяться как демонстрация теоретического материала,

изложенного на уроке физики. Кроме того, программа позволяет заниматься

поверхностной исследовательской деятельностью.

Список возможностей программы (считается, что электрическое поле задано

расстановкой зарядов):

1. По данному электрическому полю рисовать общий план линий напряженности

2. По данному электрическому полю исследовать линии напряженности (т.е.

строить через заданную точку линию напряженности).

3. По данному электрическому полю исследовать эквипотенциальные линии

(т.е. строить через данную точку эквипотенциальную линию).

4. По данному электрическому полю вычислять напряженность и потенциал в

заданной точке поля.

5. По данному электрическому полю вычислять параметры электрического поля

в заданной точке.

Список используемой литературы

1. Буховцев Б.Б., Климонтович Ю.Л., Мякишев Г.Я., «Физика. Учебное

пособие для 9 класса», М: «Просвещение», 1975.

2. Дик Ю.И., Кабардин О.Ф. и другие «Физика. Учебное пособие для 10

класса», М: «Просвещение», 1993.

Приложение

Листинг программы

Модуль Main.pas

unit Main;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

Menus, ComCtrls, ExtCtrls, ImgList, Math, StdCtrls;

type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

N1, N2, N3, N4, N5, N6, N7, N8, N9, N10, N11, N12, N13, N14, N15, N16,

N17, N18, N19, N20, N21, N23 : TMenuItem;

StatusBar1: TStatusBar;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

Image1: TImage;

Memo1: TMemo;

procedure FormResize(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FormMouseDown(Sender: TObject; Button: TMouseButton;Shift:

TShiftState; X, Y: Integer);

procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y:

Integer);

procedure FormKeyPress(Sender: TObject; var Key: Char);

procedure N6Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N8Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N12Click(Sender: TObject);

procedure N13Click(Sender: TObject);

procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift:

TShiftState; X, Y: Integer);

procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,Y:

Integer);

procedure N9Click(Sender: TObject);

procedure N10Click(Sender: TObject);

procedure N11Click(Sender: TObject);

procedure N16Click(Sender: TObject);

procedure N19Click(Sender: TObject);

procedure N20Click(Sender: TObject);

procedure N14Click(Sender: TObject);

private

public

end;

Procedure DrawGrid;

Procedure RefreshSquare(X,Y:Byte);

Procedure Circle(X,Y,R:Real;W:Byte);

Procedure RefreshStatus(X,Y:Byte);

Procedure ElTrack(X,Y:Real;B,K:Integer);

Procedure ElTrackForMoving(X,Y:Real;K:Integer;Stop:Real);

Procedure ElRefresh;

Procedure Prepare;

Procedure Stop;

Procedure Redactor;

Procedure PaintLines;

Function CheckEkviBegin(X,Y:Integer):Boolean;

Function Potenc(X,Y:Integer):Real;

type Matrix=Array[0..63,0..47] of ShortInt;

type Position=Record

X:Integer;

Y:Integer;

end;

var

Form1: TForm1;

En:Array[0..9] of Position;

Z,EnNow:ShortInt;

Qc : Matrix;

Qrc: Array [1..3071,1..3] of SmallInt;

Last,LastEkv:Array of Array [1..2] of SmallInt;

Ekv: Array[-1600..1600,-1200..1200] of Boolean;

Nc:SmallInt;

EkX,EkY,A:Integer;

F : File of Matrix;

Xxl,CalcA,EkviExpl,LineExpl:Boolean;

Xm,Ym,LastSin:Real;

E0:Array of Position;

implementation

uses Option, Calc, About;

{$R *.DFM}

Procedure DrawGrid;

Var I:Integer;

Begin

Form1.Canvas.Pen.Color:=clWhite; I:=0;

While (I0 then Form1.Canvas.Brush.Color:=clRed

else Form1.Canvas.Brush.Color:=clBlue;

Circle(X*25+13,Y*25+13,Abs(4*Qc[X,Y])-1,0);

End;

Procedure Circle(X,Y,R:Real;W:Byte);

Begin

If W=0 then Form1.Canvas.Ellipse(Round(X-R),Round(Y-

R),Round(X+R),Round(Y+R));

If W=1 then Form1.Image1.Canvas.Ellipse(Round(X-R),Round(Y-

R),Round(X+R),Round(Y+R));

End;

Procedure RefreshStatus(X,Y:Byte);

Var Q:Integer;

St:String;

Begin

Form1.StatusBar1.Panels.Items[0].Text:='';

Form1.StatusBar1.Panels.Items[1].Text:='';

Form1.StatusBar1.Panels.Items[2].Text:='';

If Qc[X,Y]=0 then Exit;

Q:=Abs(Qc[X,Y])-1;

Q:=Round(Exp(Q*Ln(2)));

If Qc[X,Y]0 then begin

If Qrc[I,3]=1 then For P:=1 to Z do ElTrack(Qrc[I,1]+3*Cos(((P-

1)*360/Z)*Pi/180),Qrc[I,2]+3*Sin(((P-1)*360/Z)*Pi/180),I,-1);

If Qrc[I,3]=2 then For P:=1 to 2*Z do ElTrack(Qrc[I,1]+3*Cos(((P-

1)*180/Z)*Pi/180),Qrc[I,2]+3*Sin(((P-1)*180/Z)*Pi/180),I,-1);

If Qrc[I,3]=4 then For P:=1 to 4*Z do ElTrack(Qrc[I,1]+3*Cos(((P-

1)*90/Z)*Pi/180),Qrc[I,2]+3*Sin(((P-1)*90/Z)*Pi/180),I,-1);

Form1.Image1.Repaint;

end;

ElRefresh;

E:=DateTimeToTimeStamp(Now).Time;

Form1.StatusBar1.Panels.Items[4].Text:='Готово...';

Form1.StatusBar1.Panels.Items[3].Text:=FloatToStr((E-B)/1000)+' сек';

End;

Procedure Prepare;

Var I,P,Q:SmallInt;

Begin

Form1.Image1.Align:=alClient;

Form1.Image1.Canvas.Brush.Color:=clBlack;

Form1.Image1.Canvas.FillRect(Rect(0,0,Form1.Image1.Width,Form1.Image1.Heigh

t));

For I:=1 to Nc do For P:=1 to 3 do Qrc[I,P]:=0; Nc:=0;

For I:=0 to 63 do For P:=0 to 47 do

If Qc[I,P]<>0 then begin

Inc(Nc);

Qrc[Nc,1]:=I*25+13;

Qrc[Nc,2]:=P*25+13;

Q:=Abs(Qc[I,P])-1;

Q:=Round(Exp(Q*Ln(2)));

If Qc[I,P]0) and (Y>0) and (XB) then Break;

Deg:=Deg*Deg*Deg;

Vx:=Vx+(K*Qrc[I,3]*Dx/Deg);

Vy:=Vy+(K*Qrc[I,3]*Dy/Deg);

end;

If (DegB) then Break;

U:=1; If Sqrt(Vx*Vx+Vy*Vy)=0 then Break;

If Sqrt(Vx*Vx+Vy*Vy)<>0 then U:=1/Sqrt(Vx*Vx+Vy*Vy);

Vx:=U*Vx; Vy:=U*Vy; X:=X+Vx; Y:=Y+Vy;

For I:=0 to Num-1 do If (Last[I,1]=Round(X)) and (Last[I,2]=Round(Y)) and

(I0) and (Y>0) and (X0 then U:=1/Sqrt(Vx*Vx+Vy*Vy);

Vx:=U*Vx; Vy:=U*Vy;

Form1.Image1.Canvas.MoveTo(Round(X),Round(Y));

X:=X+Vx; Y:=Y+Vy;

For I:=0 to Num-1 do If (Last[I,1]=Round(X)) and (Last[I,2]=Round(Y)) and

(I0 then If Abs(Xb-X)>Stop then Exit;

End;

SetLength(Last,0);

End;

Procedure ElRefresh;

Var I:Integer;

Begin

Form1.Image1.Canvas.Pen.Color:=clWhite;

For I:=1 to Nc do begin

Страницы: 1, 2, 3



Реклама
В соцсетях
скачать рефераты скачать рефераты скачать рефераты скачать рефераты скачать рефераты скачать рефераты скачать рефераты