鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 江一a

代码跑不起来

[复制链接]
 楼主| 发表于 2024-5-13 18:33:40 | 显示全部楼层
FishC 发表于 2024-5-13 17:00
在绘制图形的代码中,存在一些问题。以下是修复后的代码:

为什么只画出一条曲线
from sympy import symbols, Eq, solve, nsolve
import math
import turtle as t
L1,L2,L3,L4 = 26.5,111.6,67.5,87.5 #杆长

#角位移
angle1 = []
angle2 = []
angle3 = []
for i in range(120):#每3度求解存储数据
    angle1.append(i*3)
for constant in angle1:
    #解非线性方程,求解角位移
    constant_c = L4-L1*math.cos(math.radians(constant))
    constant_s = -L1*math.sin(math.radians(constant))
    w, x, y, z = symbols('w x y z ')
    eqs = [Eq(L2*w - L3*x, constant_c),
           Eq(L2*y - L3*z, constant_s),
           Eq(w**2 + y**2,1),
           Eq(x**2 + z**2,1)]
    displacement_quation = solve(eqs, [w, x, y, z])
    #判断符合实际的解
    if displacement_quation[0][3]>= 0:
        angle2.append(math.acos(displacement_quation[0][0]))
        angle3.append(math.acos(displacement_quation[0][1]))
    else:
        angle2.append(math.acos(displacement_quation[1][0]))
        angle3.append(math.acos(displacement_quation[1][1]))

#角速度
speed_angle1 = 1 #rad/s
speed_angle2 = []
speed_angle3 = []
for i in range(len(angle1)):
    constant2_s = L2*math.sin(angle2)
    constant3_s = L3*math.sin(angle3)
    constant1_s = L1*math.sin(math.radians(angle1))*speed_angle1
    constant2_c = L2*math.cos(angle2)
    constant3_c = L3*math.cos(angle3)
    constant1_c = L1*math.cos(math.radians(angle1))*speed_angle1
    x, y = symbols('x y')
    eqs = [Eq(-constant2_s*x + constant3_s*y, constant1_s),
           Eq(constant2_c*x - constant3_c*y, -constant1_c)]
    speed_quation = solve(eqs, [x, y])
    speed_angle2 .append(speed_quation[x])
    speed_angle3 .append(speed_quation[y])


#角加速度
acceleration_angle1 = 0
acceleration_angle2 = []
acceleration_angle3 = []
for i in range(len(angle1)):
    constant2_s = L2*math.sin(angle2)
    constant3_s = L3*math.sin(angle3)
    constant1_s = L1*math.sin(math.radians(angle1))
    constant2_c = L2*math.cos(angle2)
    constant3_c = L3*math.cos(angle3)
    constant1_c = L1*math.cos(math.radians(angle1))
    constant_s = constant2_s*speed_angle2**2 - constant3_s*speed_angle3**2 + constant1_s
    constant_c = constant2_c*speed_angle2**2 - constant3_c*speed_angle3**2 + constant1_c
    x, y = symbols('x y')
    eqs = [Eq(-constant2_s*x + constant3_s*y,constant_c),
           Eq(constant2_c*x - constant3_c*y,constant_s)]
    acceleration_quation = solve(eqs, [x, y])
    acceleration_angle2 .append(acceleration_quation[x])
    acceleration_angle3 .append(acceleration_quation[y])


#数据输出
print("{:>4},{:>10},{:>6},{:>6},{:>9},{:>7},{:>6}".format("角",
    "角2",
    "角2速度",
    "角2加速度",
    "角3",
    "角3速度",
    "角3加速度"))

t.hideturtle()
t.speed("fastest")
# 直角坐标系
t.color('red')
t.penup()
t.goto(-500, 0)
t.pendown()
t.goto(500, 0)
t.penup()
t.goto(0, -500)
t.pendown()
t.goto(0, 500)

t.penup()
t.goto(5*angle1[0], 5*math.degrees(angle2[0]))
t.color('blue')
t.width(2)
t.pendown()
for i in range(len(angle1)):
    t.goto(5*angle1,5*math.degrees(angle2))
t.penup()
t.goto(5*angle1[0], 5*math.degrees(*speed_angle2[0]))

t.color('blue')
t.width(3)
t.pendown()
for i in range(len(angle1)):
    t.goto(5*angle1, 5*math.degrees(speed_angle2))
t.penup()
t.goto(5*angle1[0],5*math.degrees(acceleration_angle2[0]))


t.color('blue')
t.width(4)
t.pendown()
for i in range(len(angle1)):
    t.goto(angle1, math.degrees(acceleration_angle2))
t.penup()
t.goto(5*angle1[0], 5*math.degrees(angle3[0]))


t.color('yellow')
t.width(2)
t.pendown()

for i in range(len(angle1)):
    t.goto(5*angle1,5*math.degrees(angle3))
t.penup()
t.goto(5 * angle1[0], 5 * math.degrees(speed_angle3[0]))


t.color('yellow')
t.width(3)
t.pendown()
for i in range(len(angle1)):
    t.goto(angle1, math.degrees(speed_angle3))
t.penup()
t.goto(5*angle1[0],5* math.degrees(acceleration_angle3[0]))


t.color('yellow')
t.width(4)
t.pendown()
for i in range(len(angle1)):
    t.goto(5 * angle1, 5 * math.degrees(acceleration_angle3))

t.mainloop()
t.done()

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-13 18:35:28 | 显示全部楼层
江一a 发表于 2024-05-13 18:33
为什么只画出一条曲线
from sympy import symbols, E ...


问题出在对角度列表进行索引的地方。由于angle1、angle2和angle3在代码中定义为空列表,所以无法对其进行索引操作。为了解决这个问题,您可以使用enumerate函数来同时遍历angle1、angle2和angle3列表,并获取它们的索引值和对应的元素值。以下是修复后的代码:

  1. from sympy import symbols, Eq, solve
  2. import math
  3. import turtle as t

  4. L1, L2, L3, L4 = 26.5, 111.6, 67.5, 87.5  # 杆长

  5. # 角位移
  6. angle1 = []
  7. angle2 = []
  8. angle3 = []
  9. for i in range(120):  # 每3度求解存储数据
  10.     angle1.append(i * 3)
  11. for constant in angle1:
  12.     # 解非线性方程,求解角位移
  13.     constant_c = L4 - L1 * math.cos(math.radians(constant))
  14.     constant_s = -L1 * math.sin(math.radians(constant))
  15.     w, x, y, z = symbols('w x y z ')
  16.     eqs = ...
  17.     displacement_equation = solve(eqs, x, y)
  18.     # 判断符合实际的解
  19.     for d in displacement_equation:
  20.         if d >= 0:
  21.             angle2.append(math.acos(d))
  22.             angle3.append(math.acos(d))

  23. # 角速度
  24. speed_angle1 = 1  # rad/s
  25. speed_angle2 = []
  26. speed_angle3 = []
  27. for i, a1 in enumerate(angle1):
  28.     constant2_s = L2 * math.sin(angle2[i])
  29.     constant3_s = L3 * math.sin(angle3[i])
  30.     constant1_s = L1 * math.sin(math.radians(a1)) * speed_angle1
  31.     constant2_c = L2 * math.cos(angle2[i])
  32.     constant3_c = L3 * math.cos(angle3[i])
  33.     constant1_c = L1 * math.cos(math.radians(a1)) * speed_angle1
  34.     x, y = symbols('x y')
  35.     eqs = ...
  36.     speed_equation = solve(eqs, x, y)
  37.     for s in speed_equation:
  38.         speed_angle2.append(s)
  39.         speed_angle3.append(s)

  40. # 角加速度
  41. acceleration_angle1 = 0
  42. acceleration_angle2 = []
  43. acceleration_angle3 = []
  44. for i, a1 in enumerate(angle1):
  45.     constant2_s = L2 * math.sin(angle2[i])
  46.     constant3_s = L3 * math.sin(angle3[i])
  47.     constant1_s = L1 * math.sin(math.radians(a1))
  48.     constant2_c = L2 * math.cos(angle2[i])
  49.     constant3_c = L3 * math.cos(angle3[i])
  50.     constant1_c = L1 * math.cos(math.radians(a1))
  51.     constant_s = constant2_s * speed_angle2[i] ** 2 - constant3_s * speed_angle3[i] ** 2 + constant1_s
  52.     constant_c = constant2_c * speed_angle2[i] ** 2 - constant3_c * speed_angle3[i] ** 2 + constant1_c
  53.     x, y = symbols('x y')
  54.     eqs = ...
  55.     acceleration_equation = solve(eqs, x, y)
  56.     for a in acceleration_equation:
  57.         acceleration_angle2.append(a)
  58.         acceleration_angle3.append(a)

  59. # 数据输出
  60. print("{:>4},{:>10},{:>6},{:>6},{:>9},{:>7},{:>6}".format("角",
  61.                                                            "角2",
  62.                                                            "角2速度",
  63.                                                            "角2加速度",
  64.                                                            "角3",
  65.                                                            "角3速度",
  66.                                                            "角3加速度"))

  67. t.hideturtle()
  68. t.speed("fastest")
  69. # 直角坐标系
  70. t.color('red')
  71. t.penup()
  72. t.goto(-500, 0)
  73. t.pendown()
  74. t.goto(500, 0)
  75. t.penup()
  76. t.goto(0, -500)
  77. t.pendown()
  78. t.goto(0, 500)

  79. t.penup()
  80. t.goto(5 * angle1[0], 5 * math.degrees(angle2[0]))
  81. t.color('blue')
  82. t.width(2)
  83. t.pendown()
  84. for i in range(len(angle1)):
  85.     t.goto(5 * angle1[i], 5 * math.degrees(angle2[i]))

  86. t.width(3)
  87. t.pendown()
  88. for i in range(len(angle1)):
  89.     t.goto(5 * angle1[i], 5 * math.degrees(speed_angle2[i]))

  90. t.width(4)
  91. t.pendown()
  92. for i in range(len(angle1)):
  93.     t.goto(5 * angle1[i], 5 * math.degrees(acceleration_angle2[i]))

  94. t.penup()
  95. t.goto(5 * angle1[0], 5 * math.degrees(angle3[0]))
  96. t.color('yellow')
  97. t.width(2)
  98. t.pendown()
  99. for i in range(len(angle1)):
  100.     t.goto(5 * angle1[i], 5 * math.degrees(angle3[i]))

  101. t.width(3)
  102. t.pendown()
  103. for i in range(len(angle1)):
  104.     t.goto(5 * angle1[i], 5 * math.degrees(speed_angle3[i]))

  105. t.width(4)
  106. t.pendown()
  107. for i in range(len(angle1)):
  108.     t.goto(5 * angle1[i], 5 * math.degrees(acceleration_angle3[i]))

  109. t.mainloop()
  110. t.done()
复制代码


这样应该能够正确地在画布上绘制出计算出来的点了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-14 10:15:53 | 显示全部楼层
6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-5-14 16:17:53 | 显示全部楼层
真的很高深这代码,我还是初学者我还是再学习学习吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-19 22:33:27 | 显示全部楼层
江一a 发表于 2024-5-13 18:33
为什么只画出一条曲线
from sympy import symbols, Eq, solve, nsolve
import math

from sympy import symbols, Eq, solve, nsolve
import math
import turtle as t
import tkinter as tk

def on_submit_button_click():
    global L1, L2, L3, L4,speed_angle1  # 声明变量是全局变量


L1_value = L1_entry.get()
L2_value = L2_entry.get()
L3_value = L3_entry.get()
L4_value = L4_entry.get()
speed_angle1_value = speed_angle1_entry.get()


root = tk.Tk()
root.title("变量赋值界面")

# 创建Entry控件和标签
labels = ['L1', 'L2', 'L3', 'L4', 'speed_angle1 ']
entries = []
for label in labels:
    tk.Label(root, text=label + ":").pack()
    entry = tk.Entry(root)
    entry.pack()
    entries.append(entry)

L1_entry, L2_entry, L3_entry, L4_entry, speed_angle1_entry= entries

submit_button = tk.Button(root, text="提交", command=on_submit_button_click)
submit_button.pack()


# 开始Tkinter事件循环
root.mainloop()





#L1,L2,L3,L4 = 26.5,111.6,67.5,87.5

#角位移
angle1 = []
angle2 = []
angle3 = []
for i in range(120):#每3度求解存储数据
    angle1.append(i*3)
for constant in angle1:
    #解非线性方程,求解角位移
    constant_c = L4-L1*math.cos(math.radians(constant))
    constant_s = -L1*math.sin(math.radians(constant))
    w, x, y, z = symbols('w x y z ')
    eqs = [Eq(L2*w - L3*x, constant_c),
           Eq(L2*y - L3*z, constant_s),
           Eq(w**2 + y**2,1),
           Eq(x**2 + z**2,1)]
    displacement_quation = solve(eqs, [w, x, y, z])
    #判断符合实际的解
    if displacement_quation[0][3]>= 0:
        angle2.append(math.acos(displacement_quation[0][0]))
        angle3.append(math.acos(displacement_quation[0][1]))
    else:
        angle2.append(math.acos(displacement_quation[1][0]))
        angle3.append(math.acos(displacement_quation[1][1]))

#角速度
speed_angle1 = 1 #rad/s
speed_angle2 = []
speed_angle3 = []
for i in range(len(angle1)):
    constant2_s = L2*math.sin(angle2)
    constant3_s = L3*math.sin(angle3)
    constant1_s = L1*math.sin(math.radians(angle1))*speed_angle1
    constant2_c = L2*math.cos(angle2)
    constant3_c = L3*math.cos(angle3)
    constant1_c = L1*math.cos(math.radians(angle1))*speed_angle1
    x, y = symbols('x y')
    eqs = [Eq(-constant2_s*x + constant3_s*y, constant1_s),
           Eq(constant2_c*x - constant3_c*y, -constant1_c)]
    speed_quation = solve(eqs, [x, y])
    speed_angle2 .append(speed_quation[x])
    speed_angle3 .append(speed_quation[y])


#角加速度
acceleration_angle1 = 0
acceleration_angle2 = []
acceleration_angle3 = []
for i in range(len(angle1)):
    constant2_s = L2*math.sin(angle2)
    constant3_s = L3*math.sin(angle3)
    constant1_s = L1*math.sin(math.radians(angle1))
    constant2_c = L2*math.cos(angle2)
    constant3_c = L3*math.cos(angle3)
    constant1_c = L1*math.cos(math.radians(angle1))
    constant_s = constant2_s*speed_angle2**2 - constant3_s*speed_angle3**2 + constant1_s
    constant_c = constant2_c*speed_angle2**2 - constant3_c*speed_angle3**2 + constant1_c
    x, y = symbols('x y')
    eqs = [Eq(-constant2_s*x + constant3_s*y,constant_c),
           Eq(constant2_c*x - constant3_c*y,constant_s)]
    acceleration_quation = solve(eqs, [x, y])
    acceleration_angle2 .append(acceleration_quation[x])
    acceleration_angle3 .append(acceleration_quation[y])




t.hideturtle()
t.speed("fastest")
# 直角坐标系
t.color('red')
t.penup()
t.goto(-500, 0)
t.pendown()
t.goto(500, 0)
t.penup()
t.goto(0, -500)
t.pendown()
t.goto(0, 500)

t.penup()
t.goto(5*angle1[0], 5*math.degrees(angle2[0]))
t.color('blue')
t.width(2)
t.pendown()
for i in range(len(angle1)):
    t.goto(5*angle1,5*math.degrees(angle2))
t.penup()
t.goto(5*angle1[0], 5*math.degrees(speed_angle2[0]))

t.color('blue')
t.width(3)
t.pendown()
for i in range(len(angle1)):
    t.goto(5*angle1, 5*math.degrees(speed_angle2))
t.penup()
t.goto(5*angle1[0],5*math.degrees(acceleration_angle2[0]))


t.color('blue')
t.width(4)
t.pendown()
for i in range(len(angle1)):
    t.goto(angle1, math.degrees(acceleration_angle2))
t.penup()
t.goto(5*angle1[0], 5*math.degrees(angle3[0]))


t.color('yellow')
t.width(2)
t.pendown()

for i in range(len(angle1)):
    t.goto(5*angle1,5*math.degrees(angle3))
t.penup()
t.goto(5 * angle1[0], 5 * math.degrees(speed_angle3[0]))


t.color('yellow')
t.width(3)
t.pendown()
for i in range(len(angle1)):
    t.goto(angle1, math.degrees(speed_angle3))
t.penup()
t.goto(5*angle1[0],5* math.degrees(acceleration_angle3[0]))


t.color('yellow')
t.width(4)
t.pendown()
for i in range(len(angle1)):
    t.goto(5 * angle1, 5 * math.degrees(acceleration_angle3))

t.mainloop()


赋值界面有错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-19 22:36:47 | 显示全部楼层
宁宁学代码 发表于 2024-5-14 16:17
真的很高深这代码,我还是初学者我还是再学习学习吧

我也是小菜鸡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-20 21:39:48 | 显示全部楼层
怎么样?楼主,AI解决掉你的问题了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-28 08:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表