# importing
import cv2
import numpy as np
import math
# defining
length1 = 100
length2 = 100
mass1 = 10
mass2 = 10
angle1 = math.pi / 2
angle2 = math.pi / 4
angularv1 = 0
angularv2 = 0
g = 1
preview = []
def mainframe(angle1, angle2, angularv1, angularv2):
windowmain = np.ones([600,600,3], dtype=np.uint8)*255
x1 = int(length1 * math.sin(angle1))
y1 = int(length1 * math.cos(angle1))
x2 = int(x1 + length2 * math.sin(angle2))
y2 = int(y1 + length2 * math.cos(angle2))
preview.append((x2, y2))
# all the visualization stuff below
cv2.line(windowmain, (300, 250), (300 + x1, 250 + y1), (0, 0, 0), 2)
cv2.ellipse(windowmain, (300 + x1, 250 + y1), (mass1, mass1), 0, 0, 360, 0, -1)
cv2.line(windowmain, (300 + x1, 250 + y1), (300 + x2, 250 + y2), (0, 0, 0), 2)
cv2.ellipse(windowmain, (300 + x2, 250 + y2), (mass2, mass2), 0, 0, 360, 0. - 1)
if len(preview) > 1:
for i in range(1, len(preview)):
cv2.line(windowmain, (300 + preview[i - 1][0], 250 + preview[i - 1][1]),
(300 + preview[i][0], 250 + preview[i][1]), (0, 0, 0), 2)
cv2.imshow("Pendulum", windowmain)
while True:
num1 = -g * (2 * mass1 + mass2) * math.sin(angle1)
num2 = -mass2 * g * math.sin(angle1 - 2 * angle2)
num3 = -2 * math.sin(angle1 - angle2) * mass2
num4 = angularv2 * angularv2 * length2 + angularv1 * angularv1 * length1 * math.cos(angle1 - angle2)
value1 = length1 * (2 * mass1 + mass2 - mass2 * math.cos(2 * angle1 - 2 * angle2))
a_1 = (num1 + num2 + num3 + num4) / value1
num1 = 2 * math.sin(angle1 - angle2)
num2 = (angularv1 * angularv1 * length1 * (mass1 + mass2))
num3 = g * (mass1 + mass2) * math.cos(angle1)
num4 = angularv2 * angularv2 * length2 * mass2 * math.cos(angle1 - angle2)
value1 = length1 * (2 * mass1 + mass2 - mass2 * math.cos(2 * angle1 - 2 * angle2))
a_2 = (num1 * (num2 + num3 + num4)) / value1
angularv1 += a_1
angularv2 += a_2
angle1 += angularv1
angle2 += angularv2
mainframe(angle1, angle2, angularv1, angularv2)
key = cv2.waitKey(1)
if key == 27:
break
cv2.destroyAllWindows()
Вот код моего маятника, который я сделал с помощью open cv, но он выглядит неправильно, любая помощь будет оценена. Мне нужна помощь в следующем: а) очищать экран каждые кадры; б) заставлять следы исчезать через некоторое время c) делать его реалистичным. Ниже приведена ссылка на видео, показывающее его работу https://cdn.discordapp.com/attachments/267624335836053506/702070161947099206/20200421_111406.mp4