{"id":485354,"date":"2026-06-28T16:42:13","date_gmt":"2026-06-28T16:42:13","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=485354"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=485354","title":{"rendered":"\u041c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u043f\u0440\u0443\u0433\u0438\u0445 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/a3\/8f\/62\/a38f622c70a037bcb4a38de53bac9841.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/a3\/8f\/62\/a38f622c70a037bcb4a38de53bac9841.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/a3\/8f\/62\/a38f622c70a037bcb4a38de53bac9841.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0443\u043f\u0440\u0443\u0433\u0438\u0439 \u0443\u0434\u0430\u0440 \u2014 \u044d\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043e\u0443\u0434\u0430\u0440\u0435\u043d\u0438\u044f, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u043b\u043d\u0430\u044f \u043a\u0438\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u044d\u043d\u0435\u0440\u0433\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f. \u0412 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u0435\u043d\u0435\u0431\u0440\u0435\u0433\u0430\u044e\u0442 \u0434\u0435\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u043c\u0438 \u0442\u0435\u043b. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u043d\u0435\u0440\u0433\u0438\u044f \u043d\u0430 \u0434\u0435\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f, \u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u0442\u0435\u043b\u0443 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e. \u0425\u043e\u0440\u043e\u0448\u0438\u043c \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435\u043c \u043a \u043c\u043e\u0434\u0435\u043b\u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0443\u043f\u0440\u0443\u0433\u043e\u0433\u043e \u0443\u0434\u0430\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0431\u0438\u043b\u044c\u044f\u0440\u0434\u043d\u044b\u0445 \u0448\u0430\u0440\u043e\u0432 \u0438\u043b\u0438 \u0443\u043f\u0440\u0443\u0433\u0438\u0445 \u043c\u044f\u0447\u0438\u043a\u043e\u0432.<\/p>\n<p><a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A3%D0%B4%D0%B0%D1%80\" rel=\"noopener noreferrer nofollow\">\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/a><\/p>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u043f\u0440\u0443\u0433\u0438\u0445 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0430\u0442\u043e\u043c\u043e\u0432 \u043e\u0434\u043d\u043e\u0430\u0442\u043e\u043c\u043d\u043e\u0433\u043e \u0433\u0430\u0437\u0430 \u0432 \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435.<\/p>\n<h2>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h2>\n<p>\u042f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0441\u0447\u0435\u0442 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u0430\u043c, \u043f\u043e\u0442\u043e\u043c \u0441\u043f\u0440\u043e\u0441\u0438\u043b Claude, \u043e\u043d \u043c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0431\u043e\u043b\u0435\u0435 \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e. \u041f\u0440\u0438\u0432\u043e\u0436\u0443 \u0435\u0433\u043e \u0432\u0435\u0440\u0441\u0438\u044e \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0430\u043c\u0438.<br \/> \u041a\u043e\u0434 \u043d\u0430 Javascript.<\/p>\n<pre><code class=\"javascript\">\/** *  @param {Atom} atom1 *  @param {Atom} atom2 *\/processCollision(atom1, atom2) {  \/\/ vector from atom1 to atom2  const dx = atom2.pos.x - atom1.pos.x  const dy = atom2.pos.y - atom1.pos.y  const distance = Math.sqrt(dx*dx + dy*dy)  const minNoIntersectionDistance = atom1.radius + atom2.radius  if (distance &gt;= minNoIntersectionDistance) return  \/\/ cos and sin of vector angle  const cosA = dx \/ distance  const sinA = dy \/ distance  \/\/ relative velocity  const dvx = atom1.velocity.x - atom2.velocity.x  const dvy = atom1.velocity.y - atom2.velocity.y  \/\/ relative velocity to normal  const dvn = dvx * cosA + dvy * sinA  \/\/ if atoms go to opposite directions, there is no collision  \/\/ NOTE: for negative time the equality sign should be opposite  if (dvn &lt; 0) return  \/\/ impulse of elastic collision  const impulseCoef = (2 * dvn) \/ (atom1.mass + atom2.mass)  \/\/ update velocities  const dvx1 = -impulseCoef * atom2.mass * cosA  const dvy1 = -impulseCoef * atom2.mass * sinA  const dvx2 = impulseCoef * atom1.mass * cosA  const dvy2 = impulseCoef * atom1.mass * sinA  atom1.velocity.add(dvx1, dvy1)  atom2.velocity.add(dvx2, dvy2)}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<details class=\"spoiler\">\n<summary>\u041a\u043b\u0430\u0441\u0441\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"javascript\">class Point {  constructor(x, y) {    this.x = x    this.y = y  }  add(x, y) {    this.x += x    this.y += y  }}class Vector {  constructor(x, y) {    this.x = 0    this.y = 0    this.add(x, y)  }  add(x, y) {    this.x += x    this.y += y    this.module = Math.sqrt(this.x * this.x + this.y * this.y)  }  cos() {    return this.module &lt; 0.0000001 ? 1 : this.x \/ this.module  }  sin() {    return this.module &lt; 0.0000001 ? 0 : this.y \/ this.module  }}class Atom {  \/**   * @param {Point} position   * @param {number} radius   * @param {number} mass   * @param {Vector} velocity   *\/  constructor(position, radius, mass, velocity) {    this.pos = position    this.radius = radius    this.mass = mass    this.velocity = velocity  }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"javascript\">calcStep(dt) {  for (let atom of this.atomList) {    this.moveAtom(atom, dt)  }  for (let atom of this.atomList) {    this.processCollisions(atom)  }}\/** * @param {Atom} atom * @param {number} dt *\/moveAtom(atom, dt) {  ...  atom.pos.add(atom.velocity.x * dt, atom.velocity.y * dt)  ...}processCollisions(atom) {  const possibleCollisions = this.getPossibleCollisions(atom)  for (let neighborAtom of possibleCollisions) {    this.processCollision(atom, neighborAtom)  }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0427\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442:<br \/> \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439, \u044d\u0442\u043e \u043e\u0441\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f. <br \/> \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0435\u0433\u043e \u0434\u043b\u0438\u043d\u0443, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<br \/> \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e.<br \/> \u041f\u0440\u043e\u0435\u0446\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u043d\u0430 \u043e\u0441\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f.<br \/> \u0415\u0441\u043b\u0438 \u0435\u0433\u043e \u0434\u043b\u0438\u043d\u0430 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f, \u0437\u043d\u0430\u0447\u0438\u0442 \u0430\u0442\u043e\u043c\u044b \u0440\u0430\u0437\u043b\u0435\u0442\u0430\u044e\u0442\u0441\u044f, \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e.<br \/> \u041c\u044b \u043d\u0430\u0448\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432\u0434\u043e\u043b\u044c \u043b\u0438\u043d\u0438\u0438 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f, \u0434\u0435\u043b\u0430\u0435\u043c \u0440\u0430\u0441\u0447\u0435\u0442 \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0435 \u0443\u043f\u0440\u0443\u0433\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u043e\u0441\u0438 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043c\u0430\u0441\u0441.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445, \u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0439 \u043d\u0430 \u043e\u0441\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u041c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043f\u043e\u043b\u044f\u0440\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445 \u201c\u0434\u043b\u0438\u043d\u0430, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u201d, \u043d\u043e \u043f\u0440\u043e\u0449\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0443\u0442. \u0422\u0430\u043c \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043d\u0430 \u043e\u0441\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f, \u0430 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044e \u0432 \u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u043a \u0435\u0441\u0442\u044c, \u0438 \u043f\u043e\u0442\u043e\u043c \u043f\u043e \u043d\u0438\u043c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u043b\u0438\u043d\u0443 \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432.<\/p>\n<p>\u0421\u0445\u0435\u043c\u0430: <\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/94\/73\/6a\/94736a5d5bcf1be64494e9b1506a0374.png\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/94\/73\/6a\/94736a5d5bcf1be64494e9b1506a0374.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/94\/73\/6a\/94736a5d5bcf1be64494e9b1506a0374.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<h2>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f<\/h2>\n<p>\u041e\u0441\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0430 \u0438\u0434\u0435\u0442 \u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u043d\u043e \u043b\u0438\u043d\u0438\u0438 \u043a\u0430\u0441\u0430\u043d\u0438\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p>\u041d\u0435\u0442 \u043e\u0441\u043e\u0431\u044b\u0445 \u043f\u0440\u0438\u0447\u0438\u043d, \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u0430\u043a \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e, \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e, \u043f\u043e\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u043a\u0438 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445. \u041d\u043e \u044f \u0431\u044b \u0441\u043a\u0430\u0437\u0430\u043b, \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 \u0442\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u0435\u0435, \u043a\u043e\u0433\u0434\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0430\u0442\u043e\u043c\u0430.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0435 \u0438\u0437 \u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u0438, \u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e \u0430\u0442\u043e\u043c\u044b \u0431\u0443\u0434\u0443\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043d\u0430 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0435 \u0443\u0441\u043f\u0435\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043b\u0435\u0442\u0435\u0442\u044c\u0441\u044f \u0438 \u0432\u0441\u0435 \u0435\u0449\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0442\u0441\u044f, \u0445\u043e\u0442\u044f \u0443\u0436\u0435 \u0440\u0430\u0437\u043b\u0435\u0442\u0430\u044e\u0442\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0440\u0430\u0437\u043b\u0435\u0442.<\/p>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Elastic_collision#Two-dimensional_collision_with_two_moving_objects\" rel=\"noopener noreferrer nofollow\">Two-dimensional collision<\/a><br \/> <a href=\"https:\/\/en.wikipedia.org\/wiki\/Dot_product#Geometric_definition\" rel=\"noopener noreferrer nofollow\">Dot product<\/a><\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"{\\displaystyle {\\begin{aligned}\\mathbf {v} '_{1}&amp;=\\mathbf {v} _{1}-{\\frac {2m_{2}}{m_{1}+m_{2}}}\\ {\\frac {\\langle \\mathbf {v} _{1}-\\mathbf {v} _{2},\\,\\mathbf {x} _{1}-\\mathbf {x} _{2}\\rangle }{\\|\\mathbf {x} _{1}-\\mathbf {x} _{2}\\|^{2}}}\\ (\\mathbf {x} _{1}-\\mathbf {x} _{2}),\\\\\\mathbf {v} '_{2}&amp;=\\mathbf {v} _{2}-{\\frac {2m_{1}}{m_{1}+m_{2}}}\\ {\\frac {\\langle \\mathbf {v} _{2}-\\mathbf {v} _{1},\\,\\mathbf {x} _{2}-\\mathbf {x} _{1}\\rangle }{\\|\\mathbf {x} _{2}-\\mathbf {x} _{1}\\|^{2}}}\\ (\\mathbf {x} _{2}-\\mathbf {x} _{1})\\end{aligned}}}\" alt=\"{\\displaystyle {\\begin{aligned}\\mathbf {v} '_{1}&amp;=\\mathbf {v} _{1}-{\\frac {2m_{2}}{m_{1}+m_{2}}}\\ {\\frac {\\langle \\mathbf {v} _{1}-\\mathbf {v} _{2},\\,\\mathbf {x} _{1}-\\mathbf {x} _{2}\\rangle }{\\|\\mathbf {x} _{1}-\\mathbf {x} _{2}\\|^{2}}}\\ (\\mathbf {x} _{1}-\\mathbf {x} _{2}),\\\\\\mathbf {v} '_{2}&amp;=\\mathbf {v} _{2}-{\\frac {2m_{1}}{m_{1}+m_{2}}}\\ {\\frac {\\langle \\mathbf {v} _{2}-\\mathbf {v} _{1},\\,\\mathbf {x} _{2}-\\mathbf {x} _{1}\\rangle }{\\|\\mathbf {x} _{2}-\\mathbf {x} _{1}\\|^{2}}}\\ (\\mathbf {x} _{2}-\\mathbf {x} _{1})\\end{aligned}}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/6d\/6d6\/6d66e8cc64a0d92b360a54907909c497.svg\" width=\"400\" height=\"88\" data-width=\"50.337\" data-height=\"11.674\" data-vertical-align=\"-5.271\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/6d\/6d6\/6d66e8cc64a0d92b360a54907909c497.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/6d\/6d6\/6d66e8cc64a0d92b360a54907909c497.svg 781w\" loading=\"lazy\" decode=\"async\"\/><img decoding=\"async\" class=\"formula\" source=\"{\\displaystyle \\langle \\mathbf {a}, \\mathbf {b} \\rangle =\\left\\|\\mathbf {a} \\right\\|\\left\\|\\mathbf {b} \\right\\|\\cos \\theta}\" alt=\"{\\displaystyle \\langle \\mathbf {a}, \\mathbf {b} \\rangle =\\left\\|\\mathbf {a} \\right\\|\\left\\|\\mathbf {b} \\right\\|\\cos \\theta}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/2c\/2c0\/2c0bc566cf2cab9b36782dacf86a0998.svg\" width=\"176\" height=\"16\" data-width=\"22.206\" data-height=\"2.262\" data-vertical-align=\"-0.566\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/2c\/2c0\/2c0bc566cf2cab9b36782dacf86a0998.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/2c\/2c0\/2c0bc566cf2cab9b36782dacf86a0998.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0412 \u043a\u043e\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0432\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u043d\u043e \u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043d\u0430 \u0440\u0430\u0437\u043b\u0435\u0442 <code>if (dvn &lt; 0) return<\/code> \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u043a \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 (\u201c\u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0443\u043b\u044f\u201d), \u0438\u043d\u0430\u0447\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0430\u0442\u043e\u043c\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u043e\u043a\u0440\u0443\u0433 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u0433\u043e \u0446\u0435\u043d\u0442\u0440\u0430.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u043f\u0430\u0440\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u0430\u0442\u043e\u043c\u043e\u0432. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0430\u0442\u043e\u043c \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u0441 2 \u0434\u0440\u0443\u0433\u0438\u043c\u0438, \u043f\u0440\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u0435 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u0443\u0436\u0435 \u043d\u043e\u0432\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0430\u0442\u043e\u043c\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e dv, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0441\u0435\u0445 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439. \u041d\u043e \u044d\u0442\u043e \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0434\u0430\u0441\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u043e\u0434\u0438\u043d \u0430\u0442\u043e\u043c \u0432\u043b\u0435\u0442\u0430\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u0432 3 \u0434\u0440\u0443\u0433\u0438\u0445 \u0430\u0442\u043e\u043c\u0430, \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e, \u0438 \u0438\u043c\u043f\u0443\u043b\u044c\u0441 \u043e\u0442 \u0430\u0442\u043e\u043c\u0430 1 \u0443\u0447\u0442\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e 3 \u0440\u0430\u0437\u0430, \u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 3 \u0430\u0442\u043e\u043c\u0430. Claude \u0438 Google AI \u043c\u043d\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u043b\u0438, \u0447\u0442\u043e \u0442\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0448\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439.<\/p>\n<p><a href=\"https:\/\/www.myphysicslab.com\/engine2D\/collision-methods-en.html\" rel=\"noopener noreferrer nofollow\">https:\/\/www.myphysicslab.com\/engine2D\/collision-methods-en.html<\/a><br \/> \u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<\/p>\n<p>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0430\u043a \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432\u043e \u0412\u0441\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u043d\u0438\u0437\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435? \u0414\u0443\u043c\u0430\u044e, \u043f\u043e\u043f\u0430\u0440\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0449\u0435, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430 \u043c\u0430\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u044b.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u0432\u0430\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u043e\u043b\u0435\u0442\u0430\u0442\u044c \u0441\u043a\u0432\u043e\u0437\u044c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0432\u0430\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u043c\u0435\u043d\u044c\u0448\u0435.<\/p>\n<p>\u0422\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435, \u043d\u043e \u0438 \u0432\u043e \u0432\u0441\u0435\u0445 \u0442\u043e\u0447\u043a\u0430\u0445 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0434\u043e \u043d\u0435\u0435. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u0432\u0430\u043d\u0442\u0430 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430.<br \/> \u0423 \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435. \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u0432\u0430\u043d\u0442\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043e\u043d \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u043a\u0432\u0430\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u0432\u0430\u043d\u0442\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043e\u043d \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439, \u0438 \u0442\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0443 \u043d\u0430\u0441 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u0438 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043a\u0432\u0430\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. \u0422\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0438\u0434\u0442\u0438 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442\u0441\u044f. \u041a\u0430\u043a \u0432 \u0442\u0435\u043e\u0440\u0438\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h2>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/h2>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/michael-v89.github.io\/elastic-collisions\/elastic-collisions.html\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>.<\/p>\n<details class=\"spoiler\">\n<summary>GIF 8Mb<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/98\/89\/56\/988956a8309953ffbd4ab4d5912f03ef.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/98\/89\/56\/988956a8309953ffbd4ab4d5912f03ef.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/98\/89\/56\/988956a8309953ffbd4ab4d5912f03ef.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<\/div>\n<\/details>\n<h2>\u0413\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u044f<\/h2>\n<p>\u041c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0433\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u044e. \u041f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0443\u0436\u043d\u0443\u044e \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u043a \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432\u0441\u0435\u0445 \u0430\u0442\u043e\u043c\u043e\u0432 &#8212; \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435, \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u0434\u0440\u0430.<\/p>\n<pre><code>calcStep(dt) {  \/\/ \u0433\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u044f  for (let atom of this.atomList) {    atom.velocity.add(0, -this.gravity * dt)  }  for (let atom of this.atomList) {    this.moveAtom(atom, dt)  }  for (let atom of this.atomList) {    this.processCollisions(atom)  }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<details class=\"spoiler\">\n<summary>GIF 1Mb<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/be\/06\/42\/be0642f057e3a7c8cd9bec2ec37fd2c4.gif\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/webt\/be\/06\/42\/be0642f057e3a7c8cd9bec2ec37fd2c4.gif 780w,&#10;       https:\/\/habrastorage.org\/webt\/be\/06\/42\/be0642f057e3a7c8cd9bec2ec37fd2c4.gif 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<\/div>\n<\/details>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1053014\/\">https:\/\/habr.com\/ru\/articles\/1053014\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0443\u043f\u0440\u0443\u0433\u0438\u0439 \u0443\u0434\u0430\u0440 \u2014 \u044d\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043e\u0443\u0434\u0430\u0440\u0435\u043d\u0438\u044f, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u043b\u043d\u0430\u044f \u043a\u0438\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u044d\u043d\u0435\u0440\u0433\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f. \u0412 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u0435\u043d\u0435\u0431\u0440\u0435\u0433\u0430\u044e\u0442 \u0434\u0435\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f\u043c\u0438 \u0442\u0435\u043b. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u043d\u0435\u0440\u0433\u0438\u044f \u043d\u0430 \u0434\u0435\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f, \u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u0442\u0435\u043b\u0443 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e. \u0425\u043e\u0440\u043e\u0448\u0438\u043c \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435\u043c \u043a \u043c\u043e\u0434\u0435\u043b\u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0443\u043f\u0440\u0443\u0433\u043e\u0433\u043e \u0443\u0434\u0430\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0431\u0438\u043b\u044c\u044f\u0440\u0434\u043d\u044b\u0445 \u0448\u0430\u0440\u043e\u0432 \u0438\u043b\u0438 \u0443\u043f\u0440\u0443\u0433\u0438\u0445 \u043c\u044f\u0447\u0438\u043a\u043e\u0432.\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u043f\u0440\u0443\u0433\u0438\u0445 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0430\u0442\u043e\u043c\u043e\u0432 \u043e\u0434\u043d\u043e\u0430\u0442\u043e\u043c\u043d\u043e\u0433\u043e \u0433\u0430\u0437\u0430 \u0432 \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435.\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u042f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0441\u0447\u0435\u0442 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u0430\u043c, \u043f\u043e\u0442\u043e\u043c \u0441\u043f\u0440\u043e\u0441\u0438\u043b Claude, \u043e\u043d \u043c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0431\u043e\u043b\u0435\u0435 \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e. \u041f\u0440\u0438\u0432\u043e\u0436\u0443 \u0435\u0433\u043e \u0432\u0435\u0440\u0441\u0438\u044e \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0430\u043c\u0438. \u041a\u043e\u0434 \u043d\u0430 Javascript.\/** *  @param {Atom} atom1 *  @param {Atom} atom2 *\/processCollision(atom1, atom2) {  \/\/ vector from atom1 to atom2  const dx = atom2.pos.x &#8212; atom1.pos.x  const dy = atom2.pos.y &#8212; atom1.pos.y  const distance = Math.sqrt(dx*dx + dy*dy)  const minNoIntersectionDistance = atom1.radius + atom2.radius  if (distance &gt;= minNoIntersectionDistance) return  \/\/ cos and sin of vector angle  const cosA = dx \/ distance  const sinA = dy \/ distance  \/\/ relative velocity  const dvx = atom1.velocity.x &#8212; atom2.velocity.x  const dvy = atom1.velocity.y &#8212; atom2.velocity.y  \/\/ relative velocity to normal  const dvn = dvx * cosA + dvy * sinA  \/\/ if atoms go to opposite directions, there is no collision  \/\/ NOTE: for negative time the equality sign should be opposite  if (dvn &lt; 0) return  \/\/ impulse of elastic collision  const impulseCoef = (2 * dvn) \/ (atom1.mass + atom2.mass)  \/\/ update velocities  const dvx1 = -impulseCoef * atom2.mass * cosA  const dvy1 = -impulseCoef * atom2.mass * sinA  const dvx2 = impulseCoef * atom1.mass * cosA  const dvy2 = impulseCoef * atom1.mass * sinA  atom1.velocity.add(dvx1, dvy1)  atom2.velocity.add(dvx2, dvy2)}\u041a\u043b\u0430\u0441\u0441\u044bclass Point {  constructor(x, y) {    this.x = x    this.y = y  }  add(x, y) {    this.x += x    this.y += y  }}class Vector {  constructor(x, y) {    this.x = 0    this.y = 0    this.add(x, y)  }  add(x, y) {    this.x += x    this.y += y    this.module = Math.sqrt(this.x * this.x + this.y * this.y)  }  cos() {    return this.module &lt; 0.0000001 ? 1 : this.x \/ this.module  }  sin() {    return this.module &lt; 0.0000001 ? 0 : this.y \/ this.module  }}class Atom {  \/**   * @param {Point} position   * @param {number} radius   * @param {number} mass   * @param {Vector} velocity   *\/  constructor(position, radius, mass, velocity) {    this.pos = position    this.radius = radius    this.mass = mass    this.velocity = velocity  }}\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:calcStep(dt) {  for (let atom of this.atomList) {    this.moveAtom(atom, dt)  }  for (let atom of this.atomList) {    this.processCollisions(atom)  }}\/** * @param {Atom} atom * @param {number} dt *\/moveAtom(atom, dt) {  &#8230;  atom.pos.add(atom.velocity.x * dt, atom.velocity.y * dt)  &#8230;}processCollisions(atom) {  const possibleCollisions = this.getPossibleCollisions(atom)  for (let neighborAtom of possibleCollisions) {    this.processCollision(atom, neighborAtom)  }}\u0427\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442: \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0439, \u044d\u0442\u043e \u043e\u0441\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f.  \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0435\u0433\u043e \u0434\u043b\u0438\u043d\u0443, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u041d\u0430\u0445\u043e\u0434\u0438\u043c \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e. \u041f\u0440\u043e\u0435\u0446\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u043d\u0430 \u043e\u0441\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0435\u0433\u043e \u0434\u043b\u0438\u043d\u0430 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f, \u0437\u043d\u0430\u0447\u0438\u0442 \u0430\u0442\u043e\u043c\u044b \u0440\u0430\u0437\u043b\u0435\u0442\u0430\u044e\u0442\u0441\u044f, \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e. \u041c\u044b \u043d\u0430\u0448\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432\u0434\u043e\u043b\u044c \u043b\u0438\u043d\u0438\u0438 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f, \u0434\u0435\u043b\u0430\u0435\u043c \u0440\u0430\u0441\u0447\u0435\u0442 \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0435 \u0443\u043f\u0440\u0443\u0433\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u043e\u0441\u0438 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043c\u0430\u0441\u0441.\u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0434\u0435\u043a\u0430\u0440\u0442\u043e\u0432\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445, \u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u0439 \u043d\u0430 \u043e\u0441\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u041c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043f\u043e\u043b\u044f\u0440\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445 \u201c\u0434\u043b\u0438\u043d\u0430, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u201d, \u043d\u043e \u043f\u0440\u043e\u0449\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0435 \u0431\u0443\u0434\u0443\u0442. \u0422\u0430\u043c \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043d\u0430 \u043e\u0441\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f, \u0430 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044e \u0432 \u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u043a \u0435\u0441\u0442\u044c, \u0438 \u043f\u043e\u0442\u043e\u043c \u043f\u043e \u043d\u0438\u043c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u043b\u0438\u043d\u0443 \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432.\u0421\u0445\u0435\u043c\u0430: \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f\u041e\u0441\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0430 \u0438\u0434\u0435\u0442 \u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u043d\u043e \u043b\u0438\u043d\u0438\u0438 \u043a\u0430\u0441\u0430\u043d\u0438\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0435\u0439.\u041d\u0435\u0442 \u043e\u0441\u043e\u0431\u044b\u0445 \u043f\u0440\u0438\u0447\u0438\u043d, \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u0430\u043a \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e, \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e, \u043f\u043e\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u043a\u0438 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445. \u041d\u043e \u044f \u0431\u044b \u0441\u043a\u0430\u0437\u0430\u043b, \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 \u0442\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u0435\u0435, \u043a\u043e\u0433\u0434\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0430\u0442\u043e\u043c\u0430.\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0435 \u0438\u0437 \u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u0438, \u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e \u0430\u0442\u043e\u043c\u044b \u0431\u0443\u0434\u0443\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043d\u0430 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0435 \u0443\u0441\u043f\u0435\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043b\u0435\u0442\u0435\u0442\u044c\u0441\u044f \u0438 \u0432\u0441\u0435 \u0435\u0449\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0442\u0441\u044f, \u0445\u043e\u0442\u044f \u0443\u0436\u0435 \u0440\u0430\u0437\u043b\u0435\u0442\u0430\u044e\u0442\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0440\u0430\u0437\u043b\u0435\u0442.Two-dimensional collision Dot product\u0412 \u043a\u043e\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0432\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u043d\u043e \u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043d\u0430 \u0440\u0430\u0437\u043b\u0435\u0442 if (dvn &lt; 0) return \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u043a \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 (\u201c\u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0443\u043b\u044f\u201d), \u0438\u043d\u0430\u0447\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0430\u0442\u043e\u043c\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u043e\u043a\u0440\u0443\u0433 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u0433\u043e \u0446\u0435\u043d\u0442\u0440\u0430.\u0412 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u043f\u0430\u0440\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u0430\u0442\u043e\u043c\u043e\u0432. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0430\u0442\u043e\u043c \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u0441 2 \u0434\u0440\u0443\u0433\u0438\u043c\u0438, \u043f\u0440\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u0435 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u0443\u0436\u0435 \u043d\u043e\u0432\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0430\u0442\u043e\u043c\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e dv, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0441\u0435\u0445 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439. \u041d\u043e \u044d\u0442\u043e \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0434\u0430\u0441\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u043e\u0434\u0438\u043d \u0430\u0442\u043e\u043c \u0432\u043b\u0435\u0442\u0430\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u0432 3 \u0434\u0440\u0443\u0433\u0438\u0445 \u0430\u0442\u043e\u043c\u0430, \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e, \u0438 \u0438\u043c\u043f\u0443\u043b\u044c\u0441 \u043e\u0442 \u0430\u0442\u043e\u043c\u0430 1 \u0443\u0447\u0442\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e 3 \u0440\u0430\u0437\u0430, \u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 3 \u0430\u0442\u043e\u043c\u0430. Claude \u0438 Google AI \u043c\u043d\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u043b\u0438, \u0447\u0442\u043e \u0442\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0448\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439.https:\/\/www.myphysicslab.com\/engine2D\/collision-methods-en.html \u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0430\u043a \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432\u043e \u0412\u0441\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u043d\u0438\u0437\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435? \u0414\u0443\u043c\u0430\u044e, \u043f\u043e\u043f\u0430\u0440\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0449\u0435, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430 \u043c\u0430\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u044b.\u0415\u0441\u043b\u0438 \u043a\u0432\u0430\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u043e\u043b\u0435\u0442\u0430\u0442\u044c \u0441\u043a\u0432\u043e\u0437\u044c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0432\u0430\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u043c\u0435\u043d\u044c\u0448\u0435.\u0422\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435, \u043d\u043e \u0438 \u0432\u043e \u0432\u0441\u0435\u0445 \u0442\u043e\u0447\u043a\u0430\u0445 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0434\u043e \u043d\u0435\u0435. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u0432\u0430\u043d\u0442\u0430 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. \u0423 \u044d\u0442\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435. \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u0432\u0430\u043d\u0442\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043e\u043d \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u043a\u0432\u0430\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u0432\u0430\u043d\u0442\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043e\u043d \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439, \u0438 \u0442\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0443 \u043d\u0430\u0441 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u0438 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043a\u0432\u0430\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. \u0422\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0438\u0434\u0442\u0438 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442\u0441\u044f. \u041a\u0430\u043a \u0432 \u0442\u0435\u043e\u0440\u0438\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0442\u0443\u0442.GIF 8Mb\u0413\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u044f\u041c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0433\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u044e. \u041f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0443\u0436\u043d\u0443\u044e \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u043a \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432\u0441\u0435\u0445 \u0430\u0442\u043e\u043c\u043e\u0432 &#8212; \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435, \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u0434\u0440\u0430.calcStep(dt) {  \/\/ \u0433\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u044f  for (let atom of this.atomList) {    atom.velocity.add(0, -this.gravity * dt)  }  for (let atom of this.atomList) {    this.moveAtom(atom, dt)  }  for (let atom of this.atomList) {    this.processCollisions(atom)  }}GIF 1Mb\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 https:\/\/habr.com\/ru\/articles\/1053014\/<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-485354","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/485354","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=485354"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/485354\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=485354"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=485354"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=485354"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}