Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions physical_block_system/index/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -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():
Expand Down
5 changes: 1 addition & 4 deletions physical_block_system/index/templates/index/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@
</div>
</div>

{{ form.t|as_crispy_field }}

<button type="submit" class="btn btn-success">Начать</button>
</form>

Expand Down Expand Up @@ -49,8 +47,7 @@

t1 = <span id="t1"> {{ t1 }} </span><br>
t2 = <span id="t2"> {{ t2 }} </span><br>
t3 = <span id="t3"> {{ t3 }} </span><br>
t = <span id="t"> {{ t }} </span><br><br>
t3 = <span id="t3"> {{ t3 }} </span><br><br>

a1 = <span id="a1"> {{ a1 }} </span><br>
a2 = <span id="a2"> {{ a2 }} </span><br>
Expand Down
85 changes: 19 additions & 66 deletions physical_block_system/index/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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': "В начальном положении",
Expand All @@ -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
Expand All @@ -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,
Expand All @@ -151,7 +105,6 @@ def caclculate_blocks(cleaned_date: dict):
't1': t1,
't2': t2,
't3': t3,
't': t,
'm1': m1,
'm2': m2,
'm': m
Expand Down
Loading