Zrýchlenie častíc
Simuláciu naprogramoval 8.11.2022 Ing. Ladislav Ides, časť skryptu od Josh Bradley https://joshbradley.me/object-collisions-with-canvas
Simulácia čatíc podľa zákona hybnosti P
m= hmotnosť
v= rýchlosť
u= rýchlosť po zrážke
P= m * v
m1 * v1 + m2 * v2 = m1 * u1 + m2 * u2
Viac o zrýchlení častíc sa dozviete tu: https://www.xtream.sk/zakony-vesmiru
Ak sa v priestore nachádza viacej častíc o rôznych veľkostiach, tak sa ich hybnosti vyrovnajú. Vyrovná sa teplota v látke. Teda väčšie častice sa budú pohybovať pomalšie a menšie častice rýchlejšie.
Ukážka je zostavená tak, že na začiatku majú najväčšiu rýchlosť veľké častice. Avšak veľmi rýchlo po zrážkach je vidieť ako sa menšie častice od väčších urýchlia a zoberú im časť hybnosti. Rýchlosť častíc sa tak usporiada podľa veľkostí. Teda veľké častice letia v priemere pomalšie ako menšie častice. Častíc nie je až také veľké množstvo ako v realite, takže vzniká tiež značný náhodný faktor, takže sa občas môže stať že niektorá častica letí mimo priemer svojej veľkosti. Avšak čím viac častíc by sa do simulácie dalo, tým stabilnejšie by boli výsledky.
Stránku si obnovte, aby ste lepšie videli zrýchlenie malých častíc na začiatku.
Okrem zrýchlenia častíc sa dá v simulácií pozorovať aj vznik gravitácie, ktoré je vyvolaná tienením si väčších častíc. Princíp vzniku gravitácie nájdete tu. Vznik gravitácie nie je tak viditeľné, lebo častíc je málo a je to len v 2 dimenziách, teda je tam vyššia pravdepodobnosť zrážky častíc ako v 3D priestore, ale aj tak sa dá všimnúť že väčšie častice do seba narážajú a snažia sa byť čo najbližšie k sebe. Samozrejme faktor náhody ich občas aj oddiali, ale väčšia pravdepodobnosť je že sa budú väčšie častice k sebe približovať. V skutočnosti gravitáciu vytvárajú oveľa menšie častice, ktorých je oveľa viac a majú vyššie rýchlosti, takže nevznikajú také turbulencie a väčšie častice sú stabilnejšie. Vzniká tam potom určitá frekvencia ich dotyku. Pretože čím viac budeme väčšie častice tlačiť k sebe tým silnejšie sa tiež od seba odrazia. Takže všetko je otázka určitej frekvencie a sily dopadu. Zároveň steny pôsobia ako tienidlo, takže väčšie častice majú často tendenciu aj narážať do stien.
Simulácia môže byť nepresná a časom sa môžu častice zrýchľovať, alebo spomaľovať. Je to zapríčinené tým, že všetko je založené na výpočtoch, ktoré nie sú s dokonalou presnosťou.
Podobným spôsobom sa dá simulovať gravitácia, avšak je nutné simulovať oveľa viac častíc, aby sa znížil faktor náhodného zásahu väčších častíc.
Sila gravitácie, teda znalivej príťažlivosti častíc zapríčinenej rozdielnou veľkosťou častíc nastáva vždy pri zrážkach všetkých druhov častíc. Jej účinok však závisí od hustoty a rozdielu veľkostí rôznych druhov častíc. Je možné ju simulovať a vytvoriť tak miniatúrny model vesmíru bez toho aby sme museli do modelu programovať čokoľvek viac ako je akcia a reakcia častíc. Jediný problém je ten, že matematicky nieje možné počítať zrážky častíc s dokonalou presnosťou, pretože pri výpočtoch dochádza k zaokrúhľovaniu hodnôt.
Pri pozorovaní pohybu častíc, to vyzerá ako bunková aktivita. To naznačuje, že pri takomto množstve kombinácií v nekonečnom čase je vznik buniek a teda života nevyhnutný.
HTML kód pre zobrazenie:
<script type="text/javascript">sem vložíte zdrojový kód</script>
<body onload="draw();"> |
Zdrojový kód simulácie:
//pohyb castic simulacia graviacie 600x600 update(time) {
/**
add(vector) {
subtract(vector) {
multiply(scalar) {
dotProduct(vector) {
get magnitude() {
get direction() { //ctx = document.getElementById('canvas').getContext('2d');
class Canvas {
sync(state) { clearDisplay() {
// opacity controls the trail effect set to 1 to remove
drawActors(actors) {
drawCircle(actor) {
class Ball { update(state, time, updateId) {
/**
/**
/**
if (distance <= this.radius + actor.radius) {
//check if hitting left or right of container
// check if hitting top or bottom of container
//if (this.position.y <= lowerLimit.y) {//moje
const newX = Math.max(Math.min(this.position.x + this.velocity.x, upperLimit.x), lowerLimit.x);
return new Ball({
get area() {
get sphereArea() {
// see elastic collision: https://en.wikipedia.org/wiki/Elastic_collision
// add mass to the system
const isMovingTowards = (particle1, particle2) => {
const runAnimation = animation => {
// return false from animation to stop
const random = (max = 9, min = 0) => { const colors = ['red', 'green', 'blue', 'purple', 'orange'];
const collidingBalls = ({ width = 600, height = 600, parent = document.body, count = 10 } = {}) => {
for (let i = 0; i < 2; i++) {
function draw() {
|