Построение эквипотенциальных линий нескольких точечных

реклама
БИНАРНЫЙ УРОК «ФИЗИКА  ИНФОРМАТИКА»
ТЕМА УРОКА: ПОСТРОЕНИЕ ЭКВИПОТЕНЦИАЛЬНЫХ ЛИНИЙ НЕСКОЛЬКИХ ТОЧЕЧНЫХ ЗАРЯДОВ.
Цели урока:
1) Научить рассчитывать потенциал в каждой точке координатной плоскости, в которой
находятся заряды, и строить эквипотенциальные линии (сечения эквипотенциальных
поверхностей координатной плоскость xOy) в среде языка программирования Паскаль.
2) Развить внимание, самостоятельность при выполнении задачи.
3) Сформировать навык пользования созданной программой (её корректировки) для других
случаев (другое количество зарядов, их расположение и знаки).
4) Сформировать единое представление о мире, его законах через объединение учебных
предметов.
Ход урока:
I. Организационный момент.
Сообщить тему урока, сформулировать цели
II. Урок физики.
1) Актуализация опорных знаний.
2) Вывод формулы расчёта потенциала в некоторой точке координатной плоскости для n
точечных зарядов:

kq1
( x1  x)  ( y1  y)
2

2


 


kq2
( x2  x)  ( y2  y)
2
n

i 1
 ... 
2
kqn
( xn  x)  ( yn  y) 2
2


,
( xi  x) 2  ( yi  y ) 2 
kqi
где   потенциал, k =
9  109
Нм
Кл 2
(x1, y1), (x2, y2), …, (xi, yi), …,(xn, yn)  координаты 1, 2, …, i, …, n точечного заряда,
q1, q2, …, qi, …, qn  величины зарядов.
II. Урок информатики.
1) Актуализация опорных знаний. (Изображение графиков функций).
2) Постановка проблемы:
1. Необходимо изобразить линии, где потенциал на плоскости одинаков.
2. Как найти такие точки? Ведь наша формула находит по координатам точек потенциал,
а не наоборот. А вывести обратную формулу мы не в состоянии.
3. Решать будем следующим образом:
а) Найдём потенциалы для всех точек экрана,
б) Найдём минимальное значение потенциала (f_min),
в) Зададим шаг изменения потенциала (step)),
г) Разными цветами изображаем точки с потенциалами, попавшими в разные
промежутки: (f_min + k*step; f_min +(k+1)*step).
д) В зависимости от качества изображения подбираем шаг (step), множитель шагов (k).
3) Реализация алгоритма в программу. (Строим эквипотенциальные линии для двух зарядов:
x1=200, y1=240, q1=100; x2=400, y2=240, q2=-50)
program ekvipotencialnye_linii;
uses graph;
var gx,gy:integer;
x,y,k,x1,y1,x2,y2,c,c1,c2,r1,r2,q1,q2:longint;
f,f_min,step:real;
begin
gx:=detect;
gy:=1;
initgraph(gx,gy,'');
x1:=200;
y1:=240;
q1:=100;
x2:=400;
y2:=240;
q2:=-50;
f_min:=0;
for x:=1 to 640 do
for y:=1 to 480 do
begin
if not (((x=x1) and (y=y1))
or ((x=x2) and (y=y2)))
then
begin
f:=q1/sqrt(sqr(x1-x)+sqr(y1-y))
+q2/sqrt(sqr(x2-x)+sqr(y2-y));
if f<f_min
then f_min:=f
end;
end;
step:=0.1;
for x:=1 to 640 do
for y:=1 to 480 do
begin
if not (((x=x1) and (y=y1))
or ((x=x2) and (y=y2)))
then
begin
c:=2;
f:=q1/sqrt(sqr(x1-x)+sqr(y1-y))
+q2/sqrt(sqr(x2-x)+sqr(y2-y));
k:=0;
while k<= 1000 do
begin
if (f>f_min+k*step)
and (f<f_min+(k+1)*step)
then
c:=14;
k:=k+4
end;
putpixel(x,y,c)
end;
end;
if abs(q1)>abs(q2)
then
begin
r1:=10;
r2:=trunc(r1*abs(q2/q1))
end
else
begin
r2:=10;
r1:=trunc(10*abs(q1/q2));
end;
if q1>0
then c1:=4
else c1:=1;
if q2>0
then c2:=4
else c2:=1;
setcolor(c1);
setfillstyle(1,c1);
fillellipse(x1,y1,r1,r1);
setcolor(c2);
setfillstyle(1,c2);
fillellipse(x2,y2,r2,r2);
end.
4) Изменение программы так, чтобы предполагался ввод данных, и была возможность
задавать другое количество точечных зарядов:
program ekvipotencialnye_linii;
uses graph;
var gx,gy:integer;
x_t,y_t,k,c_t,n,i:longint;
f,f_min,step:real;
x,y,q,c,r:array[1..10] of longint;
begin
writeln('ВВЕДИТЕ КОЛИЧЕСТВО ЗАРЯДОВ: 1<=n<=10');
readln(n);
for i:=1 to n do
begin
writeln('ВВЕДИТЕ КООРДИНАТЫ ',i,' ТОЧКИ');
readln(x[i],y[i]);
writeln('ВВЕДИТЕ ВЕЛИЧИНУ ',i,' ЗАРЯДА');
readln(q[i]);
if q[i]>0
then c[i]:=4
else c[i]:=1;
end;
gx:=detect;
gy:=1;
initgraph(gx,gy,'');
f_min:=0;
f:=0;
for x_t:=1 to 640 do
for y_t:=1 to 480 do
begin
f:=0;
for i:=1 to n do
begin
if not ((x_t=x[i]) and (y_t=y[i]))
then
begin
f:=f+q[i]/sqrt(sqr(x[i]-x_t)+sqr(y[i]-y_t));
if f<f_min
then f_min:=f
end;
end;
end;
step:=0.1;
f:=0;
for x_t:=1 to 640 do
for y_t:=1 to 480 do
begin
f:=0;
for i:=1 to n do
begin
if not ((x_t=x[i]) and (y_t=y[i]))
then
begin
c_t:=2;
f:=f+q[i]/sqrt(sqr(x[i]-x_t)+sqr(y[i]-y_t));
end;
end;
k:=0;
while k<= 2000 do
begin
if (f>f_min+k*step) and (f<f_min+(k+1)*step)
then
c_t:=14;
k:=k+4
end;
putpixel(x_t,y_t,c_t)
end;
r[1]:=20;
for i:=2 to n do
r[i]:=trunc(r[1]*abs(q[i]/q[1]));
for i:=1 to n do
begin
setcolor(c[i]);
setfillstyle(1,c[i]);
fillellipse(x[i],y[i],r[i],r[i]);
end;
end.
III. Подведение итогов урока.
Скачать