/
Chronos
/
TU_laba
Обзор
Документация
Войти
/
Chronos
/
TU_laba
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
task_0.py
73 строки
3 KB
Chronos
Мы меняемся, чтобы стать лучше, даже если это сложно
15 мар 2025, 22:35
15 мар 2025, 22:35
584ecee
Код
Авторство
О чём код?
# task 0: рисует маятник import numpy as np import matplotlib.pyplot as plt # Параметры маятника l1 = 1.5 # Длина первого звена l2 = 1.0 # Длина второго звена theta1 =1.0 # Угол отклонения первого звена от вертикали (в радианах) theta2 = 0.6 # Угол отклонения второго звена от вертикали (в радианах) # Вычисление координат концов звеньев и центров масс x1 = l1 * np.sin(theta1) y1 = l1 * np.cos(theta1) x2 = x1 + l2 * np.sin(theta2) y2 = y1 + l2 * np.cos(theta2) # Центры масс cm1_x = (x1+0)/2 cm1_y = (y1+0)/2 cm2_x = (x1+x2)/2 cm2_y = (y1+y2)/2 # Создание графика plt.figure(figsize=(10, 6)) plt.plot([0, x1], [0, y1], 'teal', lw=4) plt.plot([x1, x2], [y1, y2], 'coral', lw=4) # Отрисовка центров масс plt.plot(cm1_x, cm1_y, 'o', color='teal', markersize=10) plt.plot(cm2_x, cm2_y, 'o', color='coral', markersize=10) fs = 20 plt.plot([0.0, 0.0], [0.0, 1.0], 'k--') plt.plot([x1, x1], [y1, y1+1.0], 'k--') a1 = np.linspace(0,theta1,100) a2 = np.linspace(0,theta2,100) r1 = 0.2 plt.plot( r1*np.sin(a1), r1*np.cos(a1), 'k-', lw=1.5) plt.plot( x1+r1*np.sin(a2), y1+r1*np.cos(a2), 'k-', lw=1.5) plt.text(0.091, 0.229, r'$\theta_1$', fontsize=fs, ha='center') plt.text(1.321, 1.064, r'$\theta_2$', fontsize=fs, ha='center') # Двусторонние стрелки для длины plt.annotate('', xy=(x1, y1-0.05), xytext=(0, -0.05), arrowprops=dict(arrowstyle='<->', color='gray', lw=1.5)) plt.text(0.648, 0.320, r'$l_1$', fontsize=fs, ha='center') plt.annotate('', xy=(x2+0.03, y2-0.05+0.03), xytext=(x1, y1-0.05), arrowprops=dict(arrowstyle='<->', color='gray', lw=1.5)) plt.text(1.568+0.01, 1.177-0.01, r'$l_2$', fontsize=fs, ha='center') plt.text(0.648-0.03, 0.320+0.12, r'$m_1$', fontsize=fs, ha='center') plt.text(1.568+0.01-0.05, 1.177-0.01+0.09, r'$m_2$', fontsize=fs, ha='center') plt.annotate('', xy=(x1/2+0.045, (y1-0.05-0.05)/2-0.1+0.045), xytext=(0+0.02, -0.05-0.1+0.02), arrowprops=dict(arrowstyle='<->', color='gray', lw=1.5)) plt.text(0.357, 0.040, r'$l_{c1}$', fontsize=fs, ha='center') plt.annotate('', xy=((x2+0.03+x1)/2+0.04, (y2-0.05+0.03+y1-0.05)/2-0.08+0.04), xytext=(x1+0.03-0.01, y1-0.05-0.08+0.03-0.01), arrowprops=dict(arrowstyle='<->', color='gray', lw=1.5)) plt.text(1.454+0.01, 0.903-0.01, r'$l_{с2}$', fontsize=fs, ha='center') # Настройка графика plt.xlim(-0.15, 2) plt.ylim(-0.15, 2) plt.xticks([]) plt.yticks([]) plt.show()