首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

写一个3D旋转的python程序

今天要用到的是科学计算数据包SciPy,简单介绍一下。

Scipy是一个Python科学计算库,它提供了许多常用的科学计算功能,如数值积分、最优化、信号处理、线性代数、统计分析、图像处理、傅里叶变换等。Scipy是在Numpy的基础上构建的,因此它可以与Numpy一起使用,以便更高效地进行科学计算。

Scipy中的一些常用模块包括:

scipy.integrate:提供了数值积分函数,如quad、dblquad和nquad等。

scipy.optimize:提供了各种优化算法,如最小二乘法、非线性方程求解、曲线拟合等。

scipy.signal:提供了信号处理相关的函数,如傅里叶变换、滤波器设计、相关性分析等。

scipy.linalg:提供了线性代数相关的函数,如矩阵分解、特征值求解等。

scipy.stats:提供了统计分析相关的函数,如概率密度函数、假设检验等。

这里要引用的模块是pip install numpy scipy pyqt5 tkinter matplotlib

源代码:

import numpy as np

from scipy.spatial.transform import Rotation as R

import tkinter as tk

from mpl_toolkits.mplot3d import Axes3D

import matplotlib.pyplot as plt

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

# 创建GUI界面

root = tk.Tk()

root.title("3D Rotation")

root.geometry("500x500")

# 创建一个3D图形对象

fig = plt.figure()

ax = fig.add_subplot(111, projection='3d')

# 创建一个立方体

vertices = np.array([[-1, -1, -1],

[-1, -1, 1],

[-1, 1, -1],

[-1, 1, 1],

[ 1, -1, -1],

[ 1, -1, 1],

[ 1, 1, -1],

[ 1, 1, 1]])

faces = np.array([[0, 1, 3, 2],

[0, 4, 5, 1],

[0, 2, 6, 4],

[7, 5, 4, 6],

[7, 6, 2, 3],

[7, 3, 1, 5]])

# 绘制立方体并显示

ax.scatter(vertices[:,0], vertices[:,1], vertices[:,2])

for face in faces:

ax.plot(vertices[face,0], vertices[face,1], vertices[face,2], 'k-')

ax.set_xlim(-2,2)

ax.set_ylim(-2,2)

ax.set_zlim(-2,2)

canvas = plt.gcf().canvas

canvas = FigureCanvasTkAgg(fig, master=root)

canvas.draw()

canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)

# 创建旋转函数

def rotate():

angle_x = float(entry_x.get())

angle_y = float(entry_y.get())

angle_z = float(entry_z.get())

r = R.from_euler('xyz', [angle_x, angle_y, angle_z], degrees=True)

rotated_vertices = r.apply(vertices)

# 更新立方体的顶点坐标并重新绘制

ax.collections.clear()

ax.scatter(rotated_vertices[:,0], rotated_vertices[:,1], rotated_vertices[:,2])

for face in faces:

ax.plot(rotated_vertices[face,0], rotated_vertices[face,1], rotated_vertices[face,2], 'k-')

canvas.draw()

# 添加旋转角度输入框和按钮

frame = tk.Frame(root)

frame.pack()

label_x = tk.Label(frame, text="X轴旋转角度")

label_x.pack(side=tk.LEFT)

entry_x = tk.Entry(frame)

entry_x.pack(side=tk.LEFT)

label_y = tk.Label(frame, text="Y轴旋转角度")

label_y.pack(side=tk.LEFT)

entry_y = tk.Entry(frame)

entry_y.pack(side=tk.LEFT)

label_z = tk.Label(frame, text="Z轴旋转角度")

label_z.pack(side=tk.LEFT)

entry_z = tk.Entry(frame)

entry_z.pack(side=tk.LEFT)

button_rotate = tk.Button(root, text="旋转", command=rotate)

button_rotate.pack()

root.mainloop()

这里运行测试时可能会出现,this application failed to start because no qt platform plugin报错,原因是环境变量里未添加路径。按照如下步骤,在everything输入plugins\platforms,查找到Qt对应项目的路径,复制路径地址。

搜索栏搜索-查看高级系统设置,添加环境变量,变量名:QT_QPA_PLATFORM_PLUGIN_PATH

变量值:C:\Users\YOUR_NAME\PycharmProjects\pythonProject1\plugins\platforms。类似这样的地址别直接复制哈

重启pycharm就正常了。

再运行测试一下:

它是可以通过鼠标拖拽进行3D旋转的,感兴趣的同学可以试一下。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OxBiDAkEkkhVkBm9ttBYZnsQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券