Добре е да сме запознати с:
Страницата на Рончо
Параметрично уравнение на права
Скаларно произведение на вектори
Интеграл

Контур

Затворена начупена, непресичаща се линия, образувана от поредица от точки в равнината и свързващите ги отсечки ще наричаме контур.


Този затворен контур е изпъкнал и се състои от 5 точки и толкова отсечки.

Този контур не е изпъкнал.

Параметрично зададени затворени криви


Нека x и y са функции от параметъра t, който се изменя от t0 до t1.

Предполагаме, че кривата е затворена: x(t0) = x(t1) и y(t0) = y(t1) и е без самопресичане,
което се изразява с условието, че не съществуват двойка параметри t' и t" за които x(t') = x(t") и y(t') = y(t").

За контура

При задаване на нашия контур използваме параметрично уравнение на всяка от съставяшите го отсечки.

При t = 0 се получава точката A а при t = 1 - точката B.

Елементарни дъги

Елементарната дължина на линията k, зададена със своите параметрични уравнениия, се определя от равенството:

където са производните на x и y спрямо параметъра t.
Желаейки ds да бъде константа, ние можем да определим dt:

Чрез тази формула можем да определяме стъпката на параметъра - dt, така, че елементарната дължина да бъде простоянна.
Освен това, на всяка елементарна дъга ds от контура k конструираме вектор, отговарящ на следните условия:
1. Той е перпендикулярен на допирателната в средната точка на дъгата ds.
2. Насочен е навън от контура k.
3. Дължината му е равна на дължината на елементарната дъга ds.
Този вектор ще означаваме с

Ако на всяка елементарна дъга от контура k се съпостави описания вектор се получава нещо като "таралеж".

Предполагаме, че дължините на елементарните дъги са едни и същи,
следователно и бодлите на таралежа са еднакво дълги.
Колкото е по-прецизно разделянето на контура, т.е. колкото повече и по-къси са дъгите,
толкова повече са векторите, но за сметка на това са по-къси.

Векторно поле

Нека на всяка точка A от равнината е съпоставен вектор .
Точката, както и вектора се задават със своите координати .
Координатите на вектора F зависят от x и y.
Така, че: .
Векторните полета се изобразяват в една ограничена област в равнината с разумна гъстота.
Едно векторно поле се нарича централно, ако векторът е колинеарен на ,
където O е началото на координатната система.
Електростатичното поле, например, създадено от точков заряд в точката O има вида

Силата на отблъскване има дължина и тя (силата) е колинеарна на .

Поток на векторно поле по затворен контур

Нека е зададен контурът k, разделен на елементарни дъги и съответстващия му "таралеж".
Векторите на последния ще означаваме с и на чертежа те са изобразени с черен цвят.
Нека е зададено оше и едно централно векторно поле , - червените вектори.
Да умножим скаларно векторите и и съберем тези произведения.
Разделяйки контура все по-прецизно, ние ще се доближим до
Кръгчето в интеграла показва, че интегрирането се извършва в затворен контур.
Ако си представим векторното поле като преместване на материя по посока на съответния му вектор, то P има физически смисъл на преминаващата през контура материя.
Ако P е положително то от контура k излиза материя, а ако е отрицателно k привлича материя.
Да разгледаме един пример.
Нека е зададено централно поле и контур, състоящ се от две кончентрични, четвърт - окръжности с радиуси r и R и отсечки по осите, като е показано на чертежа.

По голямата окръжност дължината на вектора е 1 / R2 а на е R.dt.
Понеже двата вектора са еднопосочни, интегралът по голямата дъга е .
Аналогично по малката дъга той е .
По двете отсечки потокът е нула поради перпендикулярността на векторите.
Окончателно потокът е отрицателен.
Дали той е такъв за всяко централно поле с източник извън контура.
Програмния експеримент показва че е така.
Да бъдем програмисти!.

Алгоритъм за това, дали една точка е вътрешна за един затворен контур

Ние, като нормални хора, ще кажем: " Какъв е смисълът да правим програма, като това се вижда с просто око."

A е вътрещна а B - външна

Но за по-сложни контури това не е съвсем очевидно.
Например за този.

Или за този, взет от книгата на Р. Курант и Г. Робинс "Що е математика"

Математикът Жордан е казал, че всеки затворен, непресичащ се контур разделя равнината на две части - вътрешна и външна.
Ако две точки са от една и съща част, те могат да бъдат свързани с линия, непресичаща контура.
Теоремата е била доказана много трудно, въпреки своята очевидност.
Можем да си мислим и така:
Една точка A е вътрешна за контура, ако произволен лъч с начало точката A пресича контура в нечетен брой точки и външна в противоположния случай.

Точката е вътрешна, защото лъчът пресича контура в 3 точки.

Възникват усложнения, ако лъчът има обща отсечка с контура.

Тук ще постъпим по следния начин:
1. Разделяме контура на малки участъци с равни дължини. Участъците ще ги считаме за отсечки.
2. Построяваме вектор за всеки участък, перпендикулярен на кривата и насочен навън спрямо контура.
3. Конструираме централно поле спрямо изследваната точка и определяме потока му спрямо контура.
Ако той е положителен - точката е вътрешна, ако не - външна.

За работата с програмата

Контура се чертае по обичайния начин с мишката, отляво надясно,
като eдновременно с последната отсечка трябва да се натисне клавиша "Shift".
От избора - наречен "File" избираме "Drow" за да видим затворения контур.
Щракаме с мишката в произволна точка.
Ако точката е върешна, в полето на радактора се появява надписът "In" иначе - "Out" .
Работи ли? Работи. К'о поичи искате от мен.

За програмата

Тя се състои от няколко части (Unit).

За векторите
В частта за векторите основните подпрограми са:
function DotProdR(A,B:TVectR):real; Скаларно произведение
function RotLeft90R(A:TVectR):TVectR; Завъртане на вектора наляво на 90 градуса
function VectFieldCntrlR(Point,IniPoint:TVectR):TVectR; Създава на централно векторно поле в точката "Point" с начална точка "IniPoint"
procedure LenghtR(var A:TVectR); Изчислява дължината на вектора
procedure NormingR(var A:TVectR); Нормира го (разделя го на дължината му ).
В резултат се получава единичен вектор.
procedure PrNumbR(r:real;var A:TVectR); Умножава вектора по число.

За контура
В частта за контура (StClasses - най трудната) са разположени програмите, отговарящи за информацията за върховете на контура, необходима за неговото изобразяване и програмата за определяне на това, дали една точка е вътрешна или външна за него -

function InOut(X,Y:integer):boolean;.
Ще се спрем на тази програма.
Читателите, които се интересуват от програмния клас трябва да обърнат внимание на създателите и унищожителите на класове.
Тук няма да ги коментираме.
X,Y са координатите на точката, за която се определя дали е вътрешна или не.
const ds=10 е фиксираната дължина на една елементарна дъга.
End_j -Броят на елементарните дъги в една отсечка от контура.
Sum Тук се натрупва потокът на векторното поле.

ABR е един помощен вектор, който в началото представлява векторът по една насочена отсечка по контура.
После той се нормира и завърта.

dSigma - векторът, представляващ - бодил от таралежа.
За една отсечка от контура той е постоянен, перпендикулярен на отсечката и насочен навън от контура.
ItemO и ItemN са върховете на една отсечка от контура.

Чрез проверката:
if(i < Vertices.Count) then ItemN:=Vertices.Items[i] се осигурява последната отсечка да бъде затварящата контура.

Информацията от върховете на контура ItemO и ItemN се използва за определянето на вектора ABR.

Дължината на текущата отсечка се разделя на части с еднакви дължини - равни на тази на .
Броят им е End_j.

За средата на всяка една от тези малки отсечки се определя векторното поле
vField и потока през нея.

Натрупва се в Sum.

И така нататък за вътрешния цикъл, движещ се по една единствена отсечка от контура.

И така нататък за външния, обхождащ всичките негови отсечки, включително и затварящата.
Работи ли? Работи. К'о поичи искате от мен.

Можете да изтеглите ZIP-версия на програмата:
InOut.zip