If you're seeing this message, it means we're having trouble loading external resources on our website.

Ако си зад уеб филтър, моля, увери се, че домейните *. kastatic.org и *. kasandbox.org са разрешени.

Основно съдържание

Моделиране на гравитация и триене

Сега да се опитаме да направим нашите сили малко по-реалистични, като подобрим гравитацията от последния пример и се запознаем със силата на триене.

Гравитацията на Земята

Може би забеляза нещо доста неточно в последния ни пример. Колкото по-малък е кръгът, толкова по-бързо пада. В това има логика; в крайна сметка тъкмо споменахме (според втория закон на Нютон), че колкото по-малка е масата, толкова по-голямо е ускорението.
Но това не се случва в реалния свят. Ако се покатериш на върха на Наклонената кула в Пиза и пуснеш две топчета с различна маса, кое от двете ще удари земята първо? Според легендата Галилео е направил точно такъв опит през 1589 година, когато открил, че двата предмета падат с еднакво ускорение и достигат земята по едно и също време.
Защо това е така? Както ще видим по-късно в курса, силата на гравитацията се изчислява по отношение на масата на обекта. Колкото по-голям е обектът, толкова по-голяма е силата. Така, ако силата е изчислена в мащаб по отношение на масата, тя се унищожава, когато ускорението се раздели на масата. Можем да имплементираме това в нашия чертеж доста лесно, като умножим нашето измислено ускорение (поради силата на гравитацията) по масата:
for (var i = 0; i < movers.length; i++) {
    gravity.set(0, 0{,}1 * movers[i].mass);
    movers[i].applyForce(gravity);
    …
}
Докато всички обекти сега падат с една и съща скорост, по-малките обекти все още ускоряват надясно по-бързо, защото силата на вятъра е независима от масата.
Измислянето на сили ще ни доведе доста далече. Светът на ProcessingJS е измислен свят на пиксели, а ти властваш над него. Така че силата ще бъде такова число, което ти прецениш за подходящо. Въпреки това, ще дойде момент, в който ще се зачудиш "Как всъщност работи това?"
Отвори който и да е учебник по физика от гимназията и ще намериш диаграми и формули, които описват много различни сили – гравитация, електромагнетизъм, напрежение, еластичност и много други. Или пък можеш дори да разгледаш уроците по физика в Кан Академия. В този раздел ще разгледаме 2 сили – триене и гравитация. Тук не искаме да кажем, че триенето и гравитацията са фундаментални сили, които винаги ще трябва да имаш в своите ProcessingJS програми. Вместо това искаме да оценим тези две сили като казуси в следния процес:
  • Разбиране на понятието, което стои зад една сила
  • Разбиване на формулата на силата на две части:
    • Как изчисляваме посоката на силата?
    • Как да изчислим големината на силата?
  • Превеждаме тази формула до ProcessingJS код, изчисляващ един PVector, който да бъде изпратен на функцията applyForce() на нашия обект Mover.
Ако можем да последваме горните стъпки с 2 сили, то, да се надяваме, че ако ти се случи да търсиш в Google “атомно ядро слаба атомна сила" в 3 часа сутринта, ще имате уменията да вземеш това, което намериш, и да го адаптираш към една ProcessingJS програма.
Справяне с формулите
Добре, след момент ще напишем формулата за триене. Това не е първият път, когато виждаме формула в този курс; тъкмо завършихме дискусията за втория закон на Нютон, F=MA​ (или сила = маса * ускорение). Не прекарахме много време в тревоги по тази формула, защото тя е приятна и проста. Въпреки това светът навън е страшен. Само погледни уравнението за "нормално"-то разпределение, за което говорихме (без да гледаме формулата) във въведението.
f(x,μ,σ)=1σ2πe((xμ)22σ2)
Това, което виждаме, е, че формулите обичат да използват доста символи (и доста често букви от гръцката азбука). Нека да разгледаме формулата за триене.
Триене=µNv^
Ако от известно време не ти е попадала формула от математиката или от физиката, нека разгледаме 3 ключови момента, които е важно да преговорим, преди да продължим.
  • Изчисляваме дясната страна, присвояваме я на лявата страна. Това е съвсем същото като в кода! Това, което правим тук, е да изчислим дясната страна на уравнението и да я присвоим на лявата страна. В горния случай искаме да изчислим силата на триенето – лявата страна ни казва какво искаме да изчислим, а дясната страна ни казва как да го направим.
  • Дали говорим за вектор или за скалар? За нас е важно да разберем, че в някои случаи ще търсим вектор, а в други – скаларна величина. Например в този случай силата на триенето е вектор. Можем да разберем това по стрелката над думата "триене". Той има величина и посока. Дясната страна на уравнението също има вектор, което се указва от символа v^, който в този случай означава едичен вектор за скорост.
  • Когато символите са разположени един до друг, знаем, че трябва да се умножат. Горната формула всъщност има четири елемента: -1, µ, N и v^. Трябва да ги умножим един по друг и да прочетем формулата по следния начин: Триене=µNv^

Триене

Да започнем с триенето и да следваме нашите стъпки.
Триенето е дисипативна сила. Дисипативната сила е такава, в която общата енергия на системата намалява, когато един обект е в движение. Да речем, че караш кола. Когато натиснеш с крака си педала на спирачката, спирачките на колата използват триене, за да забавят движението на колелата на колата. Кинетичната енергия (движението) се превръща в топлинна енергия (топлина). Когато две повърхности са в контакт една с друга, те изпитват триене. Завършеният модел на триенето включва отделни случаи на статично триене (тяло в покой срещу повърхност) и кинетично триене (тяло в движение срещу повърхност), но за нашите цели ще разгледаме само кинетичния случай.
Ето и формула за триенето заедно с илюстрация:
Илюстрация на дете с шейна и формулата за триене Триенето =−1µN*v
От нас зависи да разделим тази формула на два компонента, които определят посоката на триенето и неговата величина. Според горната диаграма можем да видим, че триенето има посока, обратна на посоката на скоростта. Всъщност това е частта от формулата, която гласи 1v^ или -1 по единичния вектор на скоростта. В ProcessingJS това ще означава да вземем вектора на скоростта, да го нормализираме и да го умножим по -1.
var friction = velocity.get();
friction.normalize();
// Да намерим посоката на силата на триене 
// (единичен вектор в посока, обратна на посоката на скоростта).
friction.mult(-1);
Забележи двете допълнителни стъпки тук. Първо важно е да пазим копие на вектора на скоростта, тъй като не искаме по случайност да обърнем посоката на обекта. И второ – нормализираме вектора. Това е така, защото величината на триенето не е свързана с това колко бързо се движи, а ние искаме да започнем с вектор на триене с величина 1, за да може лесно да се скалира.
Според формулата величината е μN. μ, гръцката буква мю (изговаря се "мю"), и се използва, за да опише коефициента на триене. Коефициентът на триене установява силата на триенето за определена повърхност. Колкото по-висок е този коефициент, толкова по-силно е триенето; колкото по-нисък е, толкова по-слабо е триенето. Например един леден блок ще има много по-нисък коефициент на триене в сравнение с, да речем, оризова хартия. Тъй като сме в измисления свят на ProcessingJS, можем да дадем на този коефициент стойност според това какво триене искаме да получим.
var c = 0{,}01;
И сега за втората част: N. N означава нормалната сила, силата – силата на контакта, която се упражнява от обекти, които се докосват. По-точно, това е перпендикулярното упражняване на тази сила.
Помисли за превозно средство, което се движи по пътя. Превозното средство се привлича към пътя от силата на гравитацията, а третият закон на Нютон ни казва, че пътят на свой ред отблъсква превозното средство. Това е нормалната сила. В простия случай, в който един обект се движи хоризонтално, нормалната сила се равнява на масата, умножена по силата на гравитацията, Fn=mg. Това значи, че един лек спортен автомобил би упражнил по-малка нормална сила и би изпитал по-малко триене в сравнение с тежък камион или трактор.
В случая с горната диаграма с шейната, където обектът се движи по някаква повърхност под ъгъл, изчисляването на нормалната сила е малко по-сложно, защото тя не сочи в същата посока като гравитацията. Сега трябва да разберем нещо за ъглите и за тригонометрията.
Засега нашата цел е да постигнем просто "достатъчно добра", а не идеална, симулация в нашите ProcessingJS програми. Например можем да накараме триенето да работи, като приемем, че нормалната сила винаги ще има величина 1. Тогава нашето N ще бъде:
var normal = 1;
Когато стигнем до тригонометрията в следващата глава, ще се върнем към този въпрос и ще направим своя пример за триене малко по-сложен.
Сега след като имаме и величина, и посока за триенето, можем да съберем всичко заедно...
var c = 0{,}01;
var normal = 1;
var frictionMag = c * normal;
var friction = movers[i].velocity.get();
friction.mult(-1);
friction.normalize();
friction.mult(frictionMag);
…и да го добавим към примера за "сили", в който много обекти изпитват вятър, гравитация и сега триене:
Ако гледаш известно време как тази програма се изпълнява, ще забележиш, че кръговете се движат все по-малко и се приближават до една област. Тъй като триенето постоянно отблъсква обекта в обратна посока на неговото движение, обектът постоянно се забавя. Това може да е полезна техника или проблем, в зависимост от целта на твоята визуализация.

Курсът "Компютърни симулации на физични явления" е производeн на "Природата на кода" от Даниел Шифман, използвана от Creative Commons Attribution-NonCommercial 3,0 Unported License.

Искаш ли да се присъединиш към разговора?

Все още няма публикации.
Разбираш ли английски? Натисни тук, за да видиш още дискусии в английския сайт на Кан Академия.