From 2eba31c6dab0ef16fed2bdf789541d00386b8d69 Mon Sep 17 00:00:00 2001 From: Vasiliy Date: Tue, 22 Mar 2022 20:27:48 +0500 Subject: [PATCH 1/4] =?UTF-8?q?=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B4=D0=B2=D0=B8=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2=203?= =?UTF-8?q?=20=D1=84=D0=B0=D0=B7=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/js/index.js | 151 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 135 insertions(+), 16 deletions(-) diff --git a/static/js/index.js b/static/js/index.js index 70c0743..fc07f1f 100644 --- a/static/js/index.js +++ b/static/js/index.js @@ -4,24 +4,24 @@ const m1 = document.querySelector("#m1").textContent, m = document.querySelector("#m").textContent; // конечные координаты -let x = document.querySelector("#x").textContent.replace(',', '.'), - y = document.querySelector("#y").textContent.replace(',', '.'), - x1 = document.querySelector("#x1").textContent.replace(',', '.'), - y1 = document.querySelector("#y1").textContent.replace(',', '.'), - x2 = document.querySelector("#x2").textContent.replace(',', '.'), - y2 = document.querySelector("#y2").textContent.replace(',', '.'); +let x = +document.querySelector("#x").textContent.replace(',', '.'), + y = +document.querySelector("#y").textContent.replace(',', '.'), + x1 = +document.querySelector("#x1").textContent.replace(',', '.'), + y1 = +document.querySelector("#y1").textContent.replace(',', '.'), + x2 = +document.querySelector("#x2").textContent.replace(',', '.'), + y2 = +document.querySelector("#y2").textContent.replace(',', '.'); // t - время всего движения, с цифрами - время каждой фазы -let t = document.querySelector("#t").textContent.replace(',', '.'), - t1 = document.querySelector("#t1").textContent.replace(',', '.'), - t2 = document.querySelector("#t2").textContent.replace(',', '.'), - t3 = document.querySelector("#t3").textContent.replace(',', '.'); +let t = +document.querySelector("#t").textContent.replace(',', '.'), + t1 = +document.querySelector("#t1").textContent.replace(',', '.'), + t2 = +document.querySelector("#t2").textContent.replace(',', '.'), + t3 = +document.querySelector("#t3").textContent.replace(',', '.'); // ускорение на каждой фазе -let a1 = document.querySelector("#a1").textContent.replace(',', '.'), - a2 = document.querySelector("#a2").textContent.replace(',', '.'), - a3 = document.querySelector("#a3").textContent.replace(',', '.'), - a4 = document.querySelector("#a4").textContent.replace(',', '.'); +let a1 = +document.querySelector("#a1").textContent.replace(',', '.'), + a2 = +document.querySelector("#a2").textContent.replace(',', '.'), + a3 = +document.querySelector("#a3").textContent.replace(',', '.'), + a4 = +document.querySelector("#a4").textContent.replace(',', '.'); const canvas = document.querySelector('.canvas'); ctx = canvas.getContext('2d'); @@ -30,6 +30,34 @@ canvas.height = 400; canvas.width = 600; const cm = 3 // Коэф увеличения + +const data = { + left: { + x0: 185, + y0: 250, + height: 15, + width: 15, + }, + mid: { + x0: 280, + y0: 183, + height: 15, + width: 15, + }, + right: { + x0: 380, + y0: 250, + height: 15, + width: 15, + }, + main: { + x0: 193, + y0: 250, + checkP1: 185, + checkP2: 387, + finish: 250, + } +}; // Table ctx.fillStyle = 'black'; ctx.fillRect(200, 200, 60 * cm, 10 * cm); @@ -56,6 +84,97 @@ function drawLine(x0, y0, checkP1, checkP2, finish) { ctx.closePath(); } -drawLine(193, 250, 195, 387, 250); +function getDir() { + // Узнаю, в какую сторону двигается система + if (y1 < -20 && x < 30) { + return 'left'; + } + if (y2 < -20 && x > 30) { + return 'right'; + } + if (x === 30) { + return 'mid'; + } +} + +function getPhase() { + if (a3 && t3) { + return 3; + } + if (a2 && t2 && !a3 & !t3) { + return 2; + } + if (a1 && t1) { + return 1; + } +} + +function getSpeed() { + if(getPhase() === 3) { + const v3 = Math.floor((data.right.y0 - data.main.checkP1) / (a3 * t3)) * 8; + return v3; + } +} + +function start() { + if (getDir() === 'right') { + if(getPhase() === 3) { + if (data.main.y0 > data.main.checkP1) { + ctx.clearRect(data.left.x0, data.main.y0, data.left.width, data.left.height); + ctx.clearRect(data.mid.x0, data.mid.y0, data.mid.width, data.mid.height); + ctx.clearRect(data.right.x0, data.right.y0, data.right.width, data.right.height); + + data.main.y0 -= 1; + data.left.y0 -= 1; + + // Движение центрального блока + if (data.mid.x0 >= data.main.checkP2) { + data.mid.y0 += 1; + + ctx.fillRect(data.mid.x0, data.mid.y0, data.mid.height, data.mid.width); + } else { + data.mid.x0 += 1; + + ctx.fillRect(data.mid.x0, data.mid.y0, data.mid.width, data.mid.height); + } + // Движение правого блока + data.right.y0 += 1; + ctx.fillRect(data.right.x0, data.right.y0, data.right.width, data.right.height); + + ctx.fillRect(data.left.x0, data.main.y0, data.left.width, data.left.height); + } + // Центральная часть стола + if (data.main.y0 === data.main.checkP1 && data.main.x0 < data.main.checkP2) { + ctx.clearRect(data.left.x0, data.left.y0, data.left.height, data.left.width); + ctx.clearRect(data.mid.x0, data.mid.y0, data.mid.width, data.mid.height); + + if (data.left.y0 !== data.main.checkP1 - 5) { + data.left.y0 -= 5; // Костыль, чтобы нормально стиралась нить + } + + data.main.x0 += 1; + data.left.x0 += 1; + + // Движение оранжевого блока + if (data.mid.x0 >= data.main.checkP2) { + data.mid.y0 += 1; + + ctx.fillRect(data.mid.x0, data.mid.y0, data.mid.height, data.mid.width); + } else { + data.mid.x0 += 1; + + ctx.fillRect(data.mid.x0, data.mid.y0, data.mid.width, data.mid.height); + } + + ctx.fillRect(data.left.x0, data.left.y0, data.left.height, data.left.width); + } + } + } + drawLine(data.main.x0, data.main.y0, data.main.checkP1, data.main.checkP2, data.main.finish); +} -console.log(t1); \ No newline at end of file +console.log(getPhase()); +setInterval(() => { + start(); +}, getSpeed()); +console.log(getSpeed()); \ No newline at end of file From ff3caea2aab3de3dc799bcfed11c3588ef730a3a Mon Sep 17 00:00:00 2001 From: Vasiliy Date: Wed, 23 Mar 2022 18:16:10 +0500 Subject: [PATCH 2/4] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=B4=D0=B2=D0=B8=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2=20?= =?UTF-8?q?=D0=BE=D0=B1=D0=B5=20=D1=81=D1=82=D0=BE=D1=80=D0=BE=D0=BD=D1=8B?= =?UTF-8?q?,=20=D0=BD=D0=BE=20=D0=B5=D1=81=D1=82=D1=8C=20=D0=BA=D0=BE?= =?UTF-8?q?=D1=81=D1=8F=D0=BA=20=D1=81=D0=BE=20=D1=81=D0=BA=D0=BE=D1=80?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/js/index.js | 184 +++++++++++++++++++++++++++++++++------------ 1 file changed, 135 insertions(+), 49 deletions(-) diff --git a/static/js/index.js b/static/js/index.js index fc07f1f..4c4a63a 100644 --- a/static/js/index.js +++ b/static/js/index.js @@ -98,83 +98,169 @@ function getDir() { } function getPhase() { + if (a4) { + return 4; + } if (a3 && t3) { return 3; } - if (a2 && t2 && !a3 & !t3) { + if (a2 && t2) { return 2; } if (a1 && t1) { return 1; } + if (!t1) { + return 0; + } } function getSpeed() { if(getPhase() === 3) { - const v3 = Math.floor((data.right.y0 - data.main.checkP1) / (a3 * t3)) * 8; + const v3 = Math.floor((a3 * t3) * 3); return v3; } + if(getPhase() === 4) { + const v4 = Math.floor(a4 * 2.25); + return v4; + } + if(getPhase() === 2) { + const v2 = Math.floor((a2 * t2) * 80); + return v2; + } + if(getPhase() === 1) { + const v1 = Math.floor((a1 * t1) / 0.3); + return v1; + } + if(getPhase() === 0) { + return 0; + } } -function start() { - if (getDir() === 'right') { - if(getPhase() === 3) { - if (data.main.y0 > data.main.checkP1) { - ctx.clearRect(data.left.x0, data.main.y0, data.left.width, data.left.height); - ctx.clearRect(data.mid.x0, data.mid.y0, data.mid.width, data.mid.height); - ctx.clearRect(data.right.x0, data.right.y0, data.right.width, data.right.height); - - data.main.y0 -= 1; - data.left.y0 -= 1; - - // Движение центрального блока - if (data.mid.x0 >= data.main.checkP2) { - data.mid.y0 += 1; - - ctx.fillRect(data.mid.x0, data.mid.y0, data.mid.height, data.mid.width); - } else { - data.mid.x0 += 1; - - ctx.fillRect(data.mid.x0, data.mid.y0, data.mid.width, data.mid.height); - } - // Движение правого блока - data.right.y0 += 1; - ctx.fillRect(data.right.x0, data.right.y0, data.right.width, data.right.height); - - ctx.fillRect(data.left.x0, data.main.y0, data.left.width, data.left.height); - } - // Центральная часть стола - if (data.main.y0 === data.main.checkP1 && data.main.x0 < data.main.checkP2) { - ctx.clearRect(data.left.x0, data.left.y0, data.left.height, data.left.width); - ctx.clearRect(data.mid.x0, data.mid.y0, data.mid.width, data.mid.height); +function moveRight() { + if (data.main.y0 > data.main.checkP1) { + ctx.clearRect(data.left.x0, data.main.y0, data.left.width, data.left.height); + ctx.clearRect(data.mid.x0, data.mid.y0, data.mid.width, data.mid.height); + ctx.clearRect(data.right.x0, data.right.y0, data.right.width, data.right.height); + + data.main.y0 -= 1; + data.left.y0 -= 1; + + // Движение центрального блока + if (data.mid.x0 >= data.main.checkP2) { + data.mid.y0 += 1; + + ctx.fillRect(data.mid.x0, data.mid.y0, data.mid.height, data.mid.width); + } else { + data.mid.x0 += 1; + + ctx.fillRect(data.mid.x0, data.mid.y0, data.mid.width, data.mid.height); + } + // Движение правого блока + data.right.y0 += 1; + ctx.fillRect(data.right.x0, data.right.y0, data.right.width, data.right.height); + + ctx.fillRect(data.left.x0, data.main.y0, data.left.width, data.left.height); + } + // Центральная часть стола + if (data.main.y0 === data.main.checkP1 && data.main.x0 < data.main.checkP2) { + ctx.clearRect(data.left.x0, data.left.y0, data.left.height, data.left.width); + ctx.clearRect(data.mid.x0, data.mid.y0, data.mid.width, data.mid.height); + + if (data.left.y0 !== data.main.checkP1 - 5) { + data.left.y0 -= 5; // Костыль, чтобы нормально стиралась нить + } + + data.main.x0 += 1; + data.left.x0 += 1; + + // Движение центрального блока + if (data.mid.x0 >= data.main.checkP2) { + data.mid.y0 += 1; + + ctx.fillRect(data.mid.x0, data.mid.y0, data.mid.height, data.mid.width); + } else { + data.mid.x0 += 1; - if (data.left.y0 !== data.main.checkP1 - 5) { - data.left.y0 -= 5; // Костыль, чтобы нормально стиралась нить - } + ctx.fillRect(data.mid.x0, data.mid.y0, data.mid.width, data.mid.height); + } + + ctx.fillRect(data.left.x0, data.left.y0, data.left.height, data.left.width); + } + drawLine(data.main.x0, data.main.y0, data.main.checkP1, data.main.checkP2, data.right.y0); +} + +function moveLeft() { + if(data.main.finish > data.main.checkP1) { + ctx.clearRect(data.right.x0, data.right.y0, data.right.width, data.right.height); + ctx.clearRect(data.mid.x0, data.mid.y0, data.mid.width, data.mid.height); + ctx.clearRect(data.left.x0, data.left.y0, data.left.width, data.left.height); + + data.main.finish -= 1; + data.right.y0 -= 1; - data.main.x0 += 1; - data.left.x0 += 1; + // Движение центрального блока + if(data.mid.x0 < data.main.x0) { + data.mid.y0 += 1 - // Движение оранжевого блока - if (data.mid.x0 >= data.main.checkP2) { - data.mid.y0 += 1; + ctx.fillRect(data.mid.x0, data.mid.y0, data.mid.height, data.mid.width) + } else { + data.mid.x0 -= 1; - ctx.fillRect(data.mid.x0, data.mid.y0, data.mid.height, data.mid.width); - } else { - data.mid.x0 += 1; + ctx.fillRect(data.mid.x0, data.mid.y0, data.mid.width, data.mid.height); + } + //Движение левого блока + data.left.y0 += 1; + ctx.fillRect(data.left.x0, data.left.y0, data.left.width, data.left.height); + + ctx.fillRect(data.right.x0, data.right.y0, data.right.width, data.right.height); + } + // Центральная часть стола + if(data.main.finish === data.main.checkP1 && data.main.checkP2 > data.main.x0) { + ctx.clearRect(data.right.x0, data.right.y0, data.right.height, data.right.width); + ctx.clearRect(data.mid.x0, data.mid.y0, data.mid.width, data.mid.height); + + if (data.right.y0 !== data.main.checkP1 - 5) { + data.right.y0 -= 5; // Костыль, чтобы нормально стиралась нить + } - ctx.fillRect(data.mid.x0, data.mid.y0, data.mid.width, data.mid.height); - } + data.main.checkP2 -= 1; + data.right.x0 -= 1; - ctx.fillRect(data.left.x0, data.left.y0, data.left.height, data.left.width); + // Движение центрального блока + if(data.mid.x0 <= data.main.x0) { + if (data.mid.x0 !== data.main.x0 - 7) { + data.mid.x0 -= 7; // Костыль, чтобы нормально стиралась нить } + data.mid.y0 += 1; + + ctx.fillRect(data.mid.x0, data.mid.y0, data.mid.height, data.mid.width); + } else { + data.mid.x0 -= 1; + + ctx.fillRect(data.mid.x0, data.mid.y0, data.mid.width, data.mid.height); } + + ctx.fillRect(data.right.x0, data.right.y0, data.right.height, data.right.width); + } + + drawLine(data.main.checkP2, data.main.finish, data.main.checkP1, data.main.x0, data.left.y0); +} + +function start() { + if (getDir() === 'right') { + moveRight(); + } else { + moveLeft(); } - drawLine(data.main.x0, data.main.y0, data.main.checkP1, data.main.checkP2, data.main.finish); } console.log(getPhase()); -setInterval(() => { +let intervalID = setInterval(() => { start(); }, getSpeed()); + +setTimeout(() => { + clearInterval(intervalID); +}, Math.floor(t) * 1000); console.log(getSpeed()); \ No newline at end of file From b3a9bbf977ee673e69c4a8ab2a86a1f265e780a3 Mon Sep 17 00:00:00 2001 From: Dmitry Ermilov Date: Thu, 24 Mar 2022 18:50:45 +0300 Subject: [PATCH 3/4] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=B2=D0=B0=D1=82=D1=8C=20?= =?UTF-8?q?=D0=BE=D0=B1=D1=89=D0=B5=D0=B5=20=D0=B2=D1=80=D0=B5=D0=BC=D1=8F?= =?UTF-8?q?=20=D0=B4=D0=B2=D0=B8=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- physical_block_system/index/forms.py | 2 - .../index/templates/index/index.html | 5 +- physical_block_system/index/utils.py | 85 +++++-------------- 3 files changed, 20 insertions(+), 72 deletions(-) diff --git a/physical_block_system/index/forms.py b/physical_block_system/index/forms.py index ecebb38..341d33c 100644 --- a/physical_block_system/index/forms.py +++ b/physical_block_system/index/forms.py @@ -7,8 +7,6 @@ class PhysicalObjectiveForm(forms.Form): m2 = forms.FloatField(label='m₂') m = forms.FloatField(label='m, центр') - t = forms.FloatField(label='Время') - def clean(self): errors = {} for key, value in self.cleaned_data.items(): diff --git a/physical_block_system/index/templates/index/index.html b/physical_block_system/index/templates/index/index.html index 50d0378..5248fcf 100644 --- a/physical_block_system/index/templates/index/index.html +++ b/physical_block_system/index/templates/index/index.html @@ -20,8 +20,6 @@ - {{ form.t|as_crispy_field }} - @@ -49,8 +47,7 @@ t1 = {{ t1 }}
t2 = {{ t2 }}
- t3 = {{ t3 }}
- t = {{ t }}

+ t3 = {{ t3 }}

a1 = {{ a1 }}
a2 = {{ a2 }}
diff --git a/physical_block_system/index/utils.py b/physical_block_system/index/utils.py index 5aa6b1d..1701b56 100644 --- a/physical_block_system/index/utils.py +++ b/physical_block_system/index/utils.py @@ -31,10 +31,6 @@ def caclculate_blocks(cleaned_date: dict): m = cleaned_date.get('m') m1 = cleaned_date.get('m1') m2 = cleaned_date.get('m2') - t = cleaned_date.get('t') - t1 = None - t2 = None - t3 = None reversed_masses = False if m2 < m1: @@ -52,9 +48,6 @@ def caclculate_blocks(cleaned_date: dict): y0_2 = -1 * (l2 - S_TABLE / 2 + l) a1 = g * (m2 - m1 - k * m) / (m + m2 + m1) - a2 = None - a3 = None - a4 = None if a1 < 0 or m2 == m1: return { 'result_text': "В начальном положении", @@ -71,63 +64,24 @@ def caclculate_blocks(cleaned_date: dict): if True: # легкое тело окажется в (0, 0) через t1 = math.sqrt(2 * (l1 - S_TABLE / 2 + l) / a1) - # До истечения t1 - if t <= t1: - # тело проедет не t1 секунд, а за остаток от заданого t - t1 = t - y1 = y0_1 + a1 * t1 ** 2 / 2 - x1 = x0_1 = 0 - y2 = y0_2 - a1 * t1 ** 2 / 2 - x2 = x0_2 = S_TABLE - y = y0 = 0 - x = x0 + a1 * t1 ** 2 / 2 - - result_text = 'Меньшее тело остановится до блока' - else: - # После истечения t1 - # 3 страница решения - a2 = (m2 * g - k * g * (m1 + m)) / (m + m1 + m2) - t2 = _calculate_t2(S_TABLE=S_TABLE, l1=l1, l=l, a1=a1, a2=a2, t1=t1) - # До истечения t2 - if t - t1 - t2 < 0: - # тело проедет не t2 секунд, а за остаток от заданого t - # 4 страница решения - t2 = t - t1 - y1 = 0 - x1 = a1 * t1 + a2 * t2 ** 2 - y2 = -a1 * t1 + S_TABLE - 2 * l - l2 - l1 - (a2 * t2 ** 2) / 2 - x2 = S_TABLE - y = 0 - x = l1 + l + a1 * t1 + (a2 * t2 ** 2) / 2 - - result_text = 'Меньшее тело остановится после блока, но до следующего блока' - else: - # После истечения t2 - # 5 страница решения - a3 = g * (m2 + m - k * m1) / (m1+m2+m) - - t3 = _calculate_t3(l1=l1, l=l, a1=a1, a2=a2, a3=a3, t1=t1, t2=t2) - if t - t1 - t2 - t3 < 0: - # До истечения t1 - t3 = t - t1 - t2 - y1 = 0 - x1 = (a1*t1 + a2*t2) * t3 + S_TABLE - l1 - l + a3*t3**2/2 - y2 = (-l2 - l) - (a1*t1 + a2*t2) * t3 - a3*t3**2/2 - x2 = S_TABLE - y = -(a1*t1 + a2*t2) * t3 - a3*t3**2/2 - x = S_TABLE - result_text = 'Одно тело останется на столе, двое повиснут' - else: - # все тела летят вниз, a4 = g = 9,8 - a4 = g * (m + m1 + m2) / (m + m1 + m2) - - y1 = 0 - x1 = S_TABLE - y2 = -l2 - l1 - S_TABLE - x2 = S_TABLE - y = l1 + l - 2 * S_TABLE - x = S_TABLE - result_text = 'Тяжелое тело унесёт два других' + # После истечения t1 + # 3 страница решения + a2 = (m2 * g - k * g * (m1 + m)) / (m + m1 + m2) + t2 = _calculate_t2(S_TABLE=S_TABLE, l1=l1, l=l, a1=a1, a2=a2, t1=t1) + + # 5 страница решения + a3 = g * (m2 + m - k * m1) / (m1+m2+m) + t3 = _calculate_t3(l1=l1, l=l, a1=a1, a2=a2, a3=a3, t1=t1, t2=t2) + + # все тела летят вниз, a4 = g = 9,8 + a4 = g * (m + m1 + m2) / (m + m1 + m2) + + y1 = 0 + x1 = S_TABLE + y2 = -l2 - l1 - S_TABLE + x2 = S_TABLE + y = l1 + l - 2 * S_TABLE + x = S_TABLE if reversed_masses: m1, m2 = m2, m1 @@ -137,7 +91,7 @@ def caclculate_blocks(cleaned_date: dict): # "y" менять не нужно, т.к. все случаи зеркальны по y оси return { - 'result_text': result_text, + 'result_text': "Тяжелое тяло перевесит", 'y1': y1, 'x1': x1, 'y2': y2, @@ -151,7 +105,6 @@ def caclculate_blocks(cleaned_date: dict): 't1': t1, 't2': t2, 't3': t3, - 't': t, 'm1': m1, 'm2': m2, 'm': m From 63341e0adca94ff61794448708b1d3b1213bc4a0 Mon Sep 17 00:00:00 2001 From: Vasiliy Date: Mon, 28 Mar 2022 16:47:50 +0500 Subject: [PATCH 4/4] =?UTF-8?q?=D1=84=D0=B8=D0=BD=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/js/index.js | 53 +++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 29 deletions(-) diff --git a/static/js/index.js b/static/js/index.js index 4c4a63a..c350958 100644 --- a/static/js/index.js +++ b/static/js/index.js @@ -12,8 +12,7 @@ let x = +document.querySelector("#x").textContent.replace(',', '.'), y2 = +document.querySelector("#y2").textContent.replace(',', '.'); // t - время всего движения, с цифрами - время каждой фазы -let t = +document.querySelector("#t").textContent.replace(',', '.'), - t1 = +document.querySelector("#t1").textContent.replace(',', '.'), +let t1 = +document.querySelector("#t1").textContent.replace(',', '.'), t2 = +document.querySelector("#t2").textContent.replace(',', '.'), t3 = +document.querySelector("#t3").textContent.replace(',', '.'); @@ -104,34 +103,19 @@ function getPhase() { if (a3 && t3) { return 3; } - if (a2 && t2) { - return 2; - } - if (a1 && t1) { - return 1; - } if (!t1) { return 0; } } function getSpeed() { + if(getPhase() === 4) { + return a4 * 2; + } if(getPhase() === 3) { const v3 = Math.floor((a3 * t3) * 3); return v3; } - if(getPhase() === 4) { - const v4 = Math.floor(a4 * 2.25); - return v4; - } - if(getPhase() === 2) { - const v2 = Math.floor((a2 * t2) * 80); - return v2; - } - if(getPhase() === 1) { - const v1 = Math.floor((a1 * t1) / 0.3); - return v1; - } if(getPhase() === 0) { return 0; } @@ -166,6 +150,7 @@ function moveRight() { if (data.main.y0 === data.main.checkP1 && data.main.x0 < data.main.checkP2) { ctx.clearRect(data.left.x0, data.left.y0, data.left.height, data.left.width); ctx.clearRect(data.mid.x0, data.mid.y0, data.mid.width, data.mid.height); + ctx.clearRect(data.right.x0, data.right.y0, data.right.width, data.right.height); if (data.left.y0 !== data.main.checkP1 - 5) { data.left.y0 -= 5; // Костыль, чтобы нормально стиралась нить @@ -175,7 +160,10 @@ function moveRight() { data.left.x0 += 1; // Движение центрального блока - if (data.mid.x0 >= data.main.checkP2) { + if (data.mid.x0 >= data.main.checkP2 - 7) { + if(data.mid.x0 !== data.main.checkP2 - 7) { + data.mid.x0 -= 7; + } data.mid.y0 += 1; ctx.fillRect(data.mid.x0, data.mid.y0, data.mid.height, data.mid.width); @@ -186,6 +174,9 @@ function moveRight() { } ctx.fillRect(data.left.x0, data.left.y0, data.left.height, data.left.width); + + data.right.y0 += 1; + ctx.fillRect(data.right.x0, data.right.y0, data.right.width, data.right.height); } drawLine(data.main.x0, data.main.y0, data.main.checkP1, data.main.checkP2, data.right.y0); } @@ -219,6 +210,7 @@ function moveLeft() { if(data.main.finish === data.main.checkP1 && data.main.checkP2 > data.main.x0) { ctx.clearRect(data.right.x0, data.right.y0, data.right.height, data.right.width); ctx.clearRect(data.mid.x0, data.mid.y0, data.mid.width, data.mid.height); + ctx.clearRect(data.left.x0, data.left.y0, data.left.width, data.left.height); if (data.right.y0 !== data.main.checkP1 - 5) { data.right.y0 -= 5; // Костыль, чтобы нормально стиралась нить @@ -242,6 +234,11 @@ function moveLeft() { } ctx.fillRect(data.right.x0, data.right.y0, data.right.height, data.right.width); + + data.left.y0 += 1; + ctx.fillRect(data.left.x0, data.left.y0, data.left.width, data.left.height); + + ctx.fillRect(data.right.x0, data.right.y0, data.right.width, data.right.height); } drawLine(data.main.checkP2, data.main.finish, data.main.checkP1, data.main.x0, data.left.y0); @@ -255,12 +252,10 @@ function start() { } } -console.log(getPhase()); -let intervalID = setInterval(() => { +if(getSpeed() === 0) { start(); -}, getSpeed()); - -setTimeout(() => { - clearInterval(intervalID); -}, Math.floor(t) * 1000); -console.log(getSpeed()); \ No newline at end of file +} else { + setInterval(() => { + start() + }, getSpeed()); +} \ No newline at end of file