Добавление постоянного ускорения к этому маятниковому коду

1

Как я могу добавить постоянное ускорение к этому маятнику в целом при использовании этого кода? Код прямо сейчас описывает маятник, как бы я его изменил, чтобы описать маятник в движущемся поезде (где поезд имеет постоянное ускорение)? Любая помощь будет оценена, спасибо заранее.

from math import sin, pi

from time import sleep

from turtle import *


GA = 9.80665 # Gravitational Acceleration (meters per second squared)

FORM = 'Time={:6.3f}, Angle={:6.3f}, Speed={:6.3f}'

def main():

    length = 10.0            # Of pendulum (meters)
    ngol = - GA / length    # Negative G over L
    total_time = 0.0        # Seconds
    angle = 1.0             # Initial angle of pendulum (radians)
    speed = 0.0             # Initial angular velocity (radians/second)
    time_step = 0.05        # Seconds
    acc = 1
    while total_time < 30.0:
        total_time += time_step
        speed += ngol * sin(angle) * time_step
        angle += speed * time_step
        #print(FORM.format(total_time, angle, speed))
        if draw(angle, length): break
        sleep(time_step)

def init():

    setup()
    mode('logo')
    radians()
    speed(0)
    hideturtle()
    tracer(False)
    penup()

def draw(angle, length):

    if speed() != 0: return True
    clear()
    setheading(angle + pi)
    pensize(max(round(length), 1))
    pendown()
    forward(length * 25)
    penup()
    dot(length * 10)
    home()
    update()

if __name__ == '__main__':

    init()
    main()
    bye()
  • 0
    speeed += которая имеет постоянное ускорение (читай "что мне не хватает")?
  • 2
    Вы хотите, чтобы ускорение было в направлении, в котором маятник движется в данный момент, или под каким-то другим углом, скажем, вниз?
Показать ещё 4 комментария
Теги:
performance
acceleration

2 ответа

0
Лучший ответ

Мне кажется, что вам просто нужно указать горизонтальное положение (при условии, что вы находитесь в поезде, который движется только в горизонтальном направлении) к вашей функции рисования.

def draw(angle, length, horiz_pos):

if speed() != 0: return True
clear()
forward(horiz_pos)
setheading(angle + pi)
pensize(max(round(length), 1))
pendown()
forward(length * 25)
penup()
dot(length * 10)
home()
update()

И затем измените вызов функции draw(), передав позицию, основанную на скорости * time_step, где скорость увеличивается (то есть ускоряется).

acc = 1
while total_time < 30.0:
    total_time += time_step
    speed_horiz += accel_constant * time_step
    speed += ngol * sin(angle) * time_step
    pos += speed_horiz * time_step
    angle += speed * time_step
    if draw(angle, length, pos): break
    sleep(time_step)
0

Для постоянного angular ускорения w (t):

acc = 1
while total_time < 30.0:
    ...
    angle += acc * speed * time_step
    acc += 0.1

Хорошая Простая гармоническая динамика в статье wikipedia, описывающей движение маятника.

  • 0
    Я прошу прощения за неясный вопрос. Я хотел, чтобы вся система находилась в постоянном ускорении вместо углового ускорения. Пример: маятник внутри движущегося поезда.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню