You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python在3D空间绘制指定倾斜角度的圆形?

在3D空间绘制带指定倾斜角度的圆形

我想用Python在3D空间中绘制带有指定倾斜角度的圆形,效果类似目标图。目前已能绘制2D圆形,参考相关内容修改了程序,但无法实现想要的倾斜角度。

现有代码:

import numpy as np
import matplotlib.pyplot as plt

r = 5.0
a, b, c = (0.0, 0.0, 0.0)
angle = np.pi / 6 # 圆形的倾斜角度

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_xlim(-10,10)
ax.set_ylim(-10,10)
ax.set_zlim(-10,10)

phirange = np.linspace(0, 2 * np.pi, 300) # 生成完整圆形的角度序列

x = a + r * np.cos(phirange)
y = b + r * np.sin(phirange)
z=  c

ax.plot(x, y, z )
plt.show()

我尝试修改z轴代码:

z = c + r * np.cos(phirange) * np.sin(angle)

但得到的效果不符合预期。是否需要同时修改X和Y部分?该如何操作?

另外还需要实现圆形沿其他轴倾斜的效果。


解决方法

要实现3D空间中圆形的倾斜,本质是对原始XY平面上的圆形做空间旋转变换,只修改z轴坐标是不够的,需要同时调整x、y、z三个轴的坐标。

1. 沿X轴倾斜(绕X轴旋转)

绕X轴旋转θ角时,坐标变换公式为:

  • y' = ycosθ - zsinθ
  • z' = ysinθ + zcosθ
  • x' = x

对应代码修改:

import numpy as np
import matplotlib.pyplot as plt

r = 5.0
center = (0.0, 0.0, 0.0)
tilt_angle = np.pi / 6  # 绕X轴的倾斜角度

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_xlim(-10,10)
ax.set_ylim(-10,10)
ax.set_zlim(-10,10)

phirange = np.linspace(0, 2 * np.pi, 300)
# 生成原始XY平面的圆形
x = center[0] + r * np.cos(phirange)
y = center[1] + r * np.sin(phirange)
z = np.full_like(phirange, center[2])

# 绕X轴旋转变换实现倾斜
y_rot = y * np.cos(tilt_angle) - z * np.sin(tilt_angle)
z_rot = y * np.sin(tilt_angle) + z * np.cos(tilt_angle)

ax.plot(x, y_rot, z_rot)
plt.show()

2. 沿Y轴倾斜(绕Y轴旋转)

绕Y轴旋转θ角时,坐标变换公式为:

  • x' = xcosθ + zsinθ
  • z' = -xsinθ + zcosθ
  • y' = y

对应代码修改(替换上述旋转变换部分):

# 绕Y轴旋转变换
x_rot = x * np.cos(tilt_angle) + z * np.sin(tilt_angle)
z_rot = -x * np.sin(tilt_angle) + z * np.cos(tilt_angle)

ax.plot(x_rot, y, z_rot)

3. 沿Z轴倾斜(绕Z轴旋转)

绕Z轴旋转只会让圆形在XY平面内转动,不会产生空间倾斜效果,若需要平面内旋转可使用:

# 绕Z轴旋转变换
x_rot = x * np.cos(tilt_angle) - y * np.sin(tilt_angle)
y_rot = x * np.sin(tilt_angle) + y * np.cos(tilt_angle)

ax.plot(x_rot, y_rot, z)

通用旋转方法(任意轴倾斜)

如果需要绕任意自定义轴倾斜,可以使用旋转矩阵来实现,比如绕向量(u,v,w)旋转θ角,可通过构建对应的旋转矩阵完成坐标变换。


内容的提问来源于stack exchange,提问作者Gojigu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:10:25