Статья по информатике из журнала миф-2 №2 за 2004 год icon

Статья по информатике из журнала миф-2 №2 за 2004 год




Скачать 66.97 Kb.
НазваниеСтатья по информатике из журнала миф-2 №2 за 2004 год
Дата17.11.2012
Размер66.97 Kb.
ТипСтатья
источник
Содержание
Первый этап
Второй этап
ColG, Colf: word
Третий этап

Статья по информатике из журнала МИФ-2 №2 за 2004 год

Мендель Виктор Васильевич, Ледовских Ирина Анатольевна, ХГПУ

Компьютерное математическое моделирование1


Напомним текст задачи, на примере которой демонстрируется процедура компьютерного моделирования от математического описания до алгоритма и программы.

ЗАДАЧА: Внутри прямоугольной области на экране компьютера изображен лабиринт. Внутри лабиринта двигаются два шарика. Если шарики ударяются о стенки, или друг о друга, они изменяют направление движения.


Как Вы помните, эту задачу мы разделили на несколько элементарных фрагментов и каждый фрагмент рассмотрели отдельно. Первые две подзадачи были подробно описаны в прошлом номере нашего журнала. Остановимся на оставшихся двух задачах.

Задача 3. Шарик находится внутри лабиринта, внутренние перегородки которого – прямоугольники со сторонами, параллельными краям экрана. Шарик ударяется о внутренние и внешние стенки и отскакивает.

^ Первый этап: математическое описание

Основной закон движения остается тем же, что и в задаче 1: ; . Так же как в задаче 2 при ударе о вертикальную поверхность изменяется горизонтальная составляющая вектора скорости: vx= -vx, а при ударе о горизонтальную стенку меняет знак вертикальная составляющая скорости vy = -vy.

^ Второй этап: алгоритм программы

Блок-схема практически совпадает с блок-схемой из задачи №2. Уточним теперь, как в этой задаче будет проверяться условие, что шарик ударился о стенку или перегородку. Пусть перегородки и границы лабиринта окрашены в цвет с номером ColG. Касание шарика со стенкой означает, что в одной из точек (xc ± R; yc) или (xc;yc±R) на экране цвет имеет номер ColG. Поэтому, для того, чтобы определить коснулся шарик стенки (перегородки) или нет, достаточно проверить цвет точки, отстоящей от центра шарика в направлении движения шарика на расстоянии радиуса


+ 1. Напомним, что в языке Turbo Pascal функция GetPixel(x,y:integer):word возвращает значение цвета, в который окрашена точка с координатами (x, y).

Третий этап: программа

Модернизируем программу задачи № 2.

program ball_3;

Uses graph, crt;

var

driver, mode: integer; {переменные для установки драйвера и режима работы}

xc,yc,R,vx,vy,Dt,xmin,xmax,ymin,ymax: integer;

^ ColG, Colf: word;

begin

xc:=100; yc:=100; R:=10;

vx:=1; vy:=1; Dt:=1;

xmax:=600; ymax:=400;

xmin:=10; ymin:=10;

ColG:=13; Colf:=14;

{ColG – цвет стенки и внутренних перегородок лабиринта,

Colf – цвет коридоров лабиринта}

driver:=detect;

Initgraph(driver,mode,'путь к драйверу');

SetFillStyle(1,Colf);

Bar(xmin,ymin,xmax,ymax);

SetColor(ColG);

rectangle(xmin,ymin,xmax,ymax);

SetFillStyle(1,ColG);

{строим внутренние стенки лабиринта в виде закрашенных прямоугольников цвета ColG}

Bar(xmin,ymin+180,xmin+200,ymin+210);

Bar(xmin+180,ymin+210,xmin+200,ymin+320);

Bar(xmin+480,ymin,xmin+510,ymin+120);

Bar(xmin+510,ymin+100,xmin+380,ymin+120);

Bar(xmin+120,ymin,xmin+140,ymin+120);

Bar(xmin+320,ymax-160,xmin+340,ymax);

floodfill(500,440,ColG);

while not(keypressed) do

begin

{проверка условия, что шарик ударился о стенку или перегородку лабиринта}

if (GetPixel(xc+R+1,yc)=ColG) or (GetPixel(xc-R-1,yc)=ColG)

then vx:=-vx;

if (GetPixel(xc,yc+R+1)=ColG) or (GetPixel(xc,yc-R-1)=ColG)

then vy:=-vy;

xc:=xc+vx*Dt; yc:=yc+vy*Dt;

SetColor(ColG);

circle(xc,yc,R);

delay(10);

SetColor(Colf);

circle(xc,yc,R);

end;

closegraph;

end.


Четвертый этап: отладка программы.

Необходимо корректно выбрать xc и yc (чтобы шарик не оказался «внутри» стенки) и тщательно «выстроить» внутренние перегородки лабиринта. При построении лабиринта желательно учесть, что ширина внутренних перегородок должна быть не меньше радиуса шарика.

Рассмотрим теперь задачу об упругом ударе двух шариков.

Задача 4. (об упругом ударе двух шариков). Два одинаковых шарика двигаются на экране. Ударяясь друг о друга они изменяют направление движения.

До того, как приступить к математическому описанию, уточним физическую постановку задачи. В основе процессов, протекающих в задаче, лежит закон сохранения импульса.

1 Случай. Лобовой удар шариков. В этом случае направления движения шариков совпадают с направлением, проходящим через центры шариков. При этом возможны два подслучая:

  1. шарики движутся навстречу друг другу, а после удара разлетаются в противоположные стороны;

  2. один шарик догоняет другой и после удара они движутся в одном направлении.

Из законов сохранения импульса и энергии следует, что в подслучае а) происходит «обмен» скоростями, т.е.:

    • первый шарик после удара меняет направление и получает скорость второго;

    • второй шарик меняет направление и получает скорость первого.

То же происходит и в подслучае b), за исключением того, что направления движения шаров не меняются.

Таким образом, если скорости шаров до упругого удара были v1 и v2, а после удара v1 и v2, то v1 = v2 и v2 = v1.

2 Случай. Общий случай, когда скорости шариков не направлены по линии, проходящей через их центры (см. рисунок).



Разложим скорости и на две взаимно-перпендикулярные составляющие, считая, что одна ось (OX) проходит через центры шариков.

и .

Уравнения движения при нецентральном ударе имеют сложный вид, поэтому мы упростим физическую картину. Будем считать, что в результате удара меняются только первые составляющие скоростей, т.е. и .

Запишем в векторном виде, как выразятся и :

Из свойств скалярного произведения следует, что: , а .

Отсюда и

Таким образом:



Обозначим координаты векторов скорости шаров и , а координаты центров шаров O1(x1c, y1c); O2(x2c, y2c).

Заметим также, что O1O2 = 2R, а у вектора координаты {x2c-x1c, y2c-y1c}.

Обозначим слагаемое, прибавляемое к и отнимаемое от . Его координаты равны {(x2c-x1c)k; (y2c-y1c)k},

где k = [(v1x-v2x)(x2c-x1c)+(v1y – v2y)(y2c-y1c)]/4R2.

Окончательно получаем формулы для пересчета координат векторов скоростей после удара:

v1x = v1x – k(x2c – x1c)

v1y = v1y – k(y2c – y1c)

v2x = v2x + k(x2c – x1c) (*)

v2y = v2y + k(y2c – y1c)

^ Третий этап: программа

Программа составляется аналогично программе задачи № 2 с единственным отличием в пересчете скоростей и постановке условий.

Условием будет являться:

if sqr(x2c-x1c)+sqr(y2c-y1c)<=4*sqr(R) then skorost(v1x,v1y,v2x,v2y);

В процедуре skorost (var v1x,v1y,v2x,v2y:real) осуществляется пересчет координат векторов скоростей после удара по формулам (*).

Приведем текст программы:


program ball_4;

Uses graph, crt; {подключение библиотеки графических функций и процедур}

var

driver, mode: integer; {переменные для установки драйвера и режима работы}

x1c,y1c,x2c, y2c, R, Dt,xmin,xmax,ymin,ymax: longint;

v1x,v1y,v2x, v2y: integer;

Colf, ColG:word;

procedure skorost(var v1x,v1y,v2x,v2y:integer); {процедура для пересчета координат векторов скоростей после удара}

var k:real;

begin

k:=((v1x-v2x)*(x2c-x1c)+(v1y-v2y)*(y2c-y1c))/(4*sqr(R));

v1x:=round(v1x-k*(x2c-x1c));

v1y:=round(v1y-k*(y2c-y1c));

v2x:=round(v2x+k*(x2c-x1c));

v2y:=round(v2y+k*(y2c-y1c));

end;

begin

x1c:=100; y1c:=100; {задаем начальные условия}

x2c:=300; y2c:=250; R:=10;

v1x:=2; v1y:=-1; v2x:=-5; v2y:=2; Dt:=1;

xmax:=600; ymax:=400;

xmin:=10; ymin:=10;

Colf:=14; ColG:=13;

driver:=detect;

Initgraph(driver,mode,'путь к драйверу'); {инициализация графического режима}

SetFillStyle(1,Colf);

Bar(xmin,ymin,xmax,ymax);

SetColor(ColG);

while not(keypressed) do

begin

if sqr(x2c-x1c)+sqr(y2c-y1c)<=4*sqr(R)

then skorost(v1x,v1y,v2x,v2y); {проверка условия соударения двух шариков и пересчет координат векторов скоростей}

{проверка на достижение границы и пересчет координат скоростей}

if (x1c<=xmin+R) or (x1c>=xmax-R) then v1x:=-v1x;

if (y1c<=ymin+R) or (y1c>=ymax-R) then v1y:=-v1y;

if (x2c<=xmin+R) or (x2c>=xmax-R) then v2x:=-v2x;

if (y2c<=ymin+R) or (y2c>=ymax-R) then v2y:=-v2y;

x1c:=x1c+v1x*Dt; y1c:=y1c+v1y*Dt;

x2c:=x2c+v2x*Dt; y2c:=y2c+v2y*Dt;

SetColor(ColG);

SetFillStyle(1,ColG);

circle(x1c,y1c,R); FloodFill(x1c,y1c,ColG); {рисуем первый шарик}

SetFillStyle(1,ColG-1);

circle(x2c,y2c,R); FloodFill(x2c,y2c,ColG); {рисуем второй шарик}

delay(10);

SetColor(Colf);

SetFillStyle(1,Colf);

circle(x1c,y1c,R); FloodFill(x1c,y1c,Colf);

circle(x2c,y2c,R); FloodFill(x2c,y2c,Colf);

end;

closegraph;

end.


1 Данная статья является продолжением статьи «Компьютерное математическое моделирование», опубликованной в № 3 – 2004 г.

Хабаровская краевая заочная физико-математическая школа



Похожие:

Статья по информатике из журнала миф-2 №2 за 2004 год iconСтатья по информатике из журнала миф-2 №1 за 2004 год
Рассмотрим процедуру компьютерного моделирования от математического описания до алгоритма и программы. Для этого возьмем глобальную...
Статья по информатике из журнала миф-2 №2 за 2004 год iconСтатья по информатике из журнала миф-2 №2 за 2004 год
Традиционно наибольшее число работ поступило из городов Хабаровск и Комсомольск-на-Амуре. Из года в год большую активность проявляют...
Статья по информатике из журнала миф-2 №2 за 2004 год iconСтатья по информатике из журнала миф-2 №4 за 2004 год Звягина Анна Стефановна, хгпу компьютерные сети с чего все начиналось
Поэтому такие машины имели большое количество (несколько десятков) так называемых терминалов – подсоединенных к машине дисплеев с...
Статья по информатике из журнала миф-2 №2 за 2004 год iconСтатья по информатике из журнала миф-2 №4 за 2005 год
Данное предписание должно удовлетворять свойствам, перечисленным в предыдущей статье
Статья по информатике из журнала миф-2 №2 за 2004 год iconСтатья по информатике из журнала миф-2 №4 за 2000 год
Все мы понимаем, что для записи алгоритмов нам нужен специальный язык. Повторим коротко, почему мы так думаем
Статья по информатике из журнала миф-2 №2 за 2004 год iconСтатья по информатике из журнала миф-2 №4 за 2002 год
Теория игр это один из разделов современной математики, в котором изучаются проблемы, связанные с принятием решений в условиях нехватки...
Статья по информатике из журнала миф-2 №2 за 2004 год iconСтатья по информатике из журнала миф-2 №4 за 2001 год
Слова и тем более предложения естественного языка могут иметь несколько значений и не всегда понятно, как нужно слово понимать
Статья по информатике из журнала миф-2 №2 за 2004 год iconСтатья по информатике из журнала миф-2 №2 за 2002 год
За последние несколько лет сложились определенные традиции при проведении городской олимпиады по информатике. То есть при всем содержательном...
Статья по информатике из журнала миф-2 №2 за 2004 год iconСтатья по информатике из журнала миф-2 №4 за 2003 год
В современных компьютерах изображения на экране строятся в виде растров, и всегда прямоугольных. Пример растра и изображения, построенного...
Статья по информатике из журнала миф-2 №2 за 2004 год iconСтатья по информатике из журнала миф-2 №1 за 2002 год
Дорогие читатели. В данной статье излагается материал по информатике. Вам необходимо внимательно изучить этот материал, решить задачи,...
Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©edu.znate.ru 2000-2013
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы