【问题标题】:cylinder "cuts" a sphere in python圆柱体在 python 中“切割”一个球体
【发布时间】:2015-05-09 07:58:38
【问题描述】:

由于我不能很好地手工绘制,我使用 python/matplotlib 来绘制一个球体和一个圆柱体,而不是“切穿”并制作一条曲线。 圆柱有方程

x^2+y^2-a*x=0

球体是用方程完成的:

x^2+y^2+z^2=a^2

我输入 a 并绘制球体

# -*- coding: utf-8 -*-
from numpy import*
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
fig=plt.figure()
ax=Axes3D(fig)
a=input('a? ')
u,v=mgrid[0:2*pi:20j,0:pi/2:10j]
x=a*cos(u)*sin(v)
y=a*sin(u)*sin(v)
z=a*cos(v)
ax.plot_wireframe(x,y,z,color='b')
ax.set_xlabel("x"); ax.set_ylabel("y"); ax.set_zlabel("z")
plt.show()
plt.close()

现在我想画圆柱体,如果可以的话,画出两个图形相交的曲线......但不知道......

我想我忘了说这是 xyz 坐标的第一部分(全部为正)

【问题讨论】:

  • 你的圆柱方程不正确。
  • 是的...我看到写得不好...但是可以理解吗?
  • 不是交点总是一个圆(在赤道上如果 a(cyl) == a(sph)?你是否打算将圆柱在 x 和 y 方向上位移一个金额?
  • 交点不是一个圆,而是一个球楔,我想要从 (a,0,0) 到 (0,0,a) 的曲线;(
  • @LyonBuster 刚刚在我的回答中添加了一个稍微修改过的代码版本来帮助你

标签: python matplotlib geometry


【解决方案1】:

看来你要代表漂亮的Viviani's curve

使用您的球坐标,圆柱方程变为

a²sin²(v)-a²cos(u)sin(v),

sin(v)=cos(u),

u+v=π/2.

因此改变uv 中的一个就足够了,推导出另一个参数并插入球面到笛卡尔变换,以沿着曲线获得尽可能多的点并使用 plot 绘制.

【讨论】:

  • 如果你最后发布你的结果会很好(f.i.屏幕复制)。
【解决方案2】:

圆柱体的等效参数方程为

x = b * sin(u) + xoff
y = b * cos(u) + yoff
z = v

假设您想要不同的半径和原点。

我真的不明白你想要得到什么作为输出。大概不是两个曲面的交集——这将是一条曲线(我原以为球形楔形是一个实心形状http://en.wikipedia.org/wiki/Spherical_wedge)你能用搅拌机做你想做的事吗?

编辑 - 偏移量。

您可以将曲线创建为沿这些线计算的点数组http://en.wikipedia.org/wiki/Sphere%E2%80%93cylinder_intersection(这些图片是您想要的吗?)

EDIT2 - 刚刚查看了您的代码,发现了一些小问题,例如没有制作完整的球体。无论如何,这里有一些东西要开始 - 你需要过滤掉对象不相交的负数的平方根!

...
u,v=mgrid[0:2*pi:50j,0:pi:25j]

a1 = input('a1? ')
x1 = a1 * cos(u) * sin(v)
y1 = a1 * sin(u) * sin(v)
z1 = a1 * cos(v)
ax.plot_wireframe(x1, y1, z1, color='b')

a2 = input('a2? ')
xoff = input('offset? ')
x2 = a2 * cos(u) + xoff
y2 = a2 * sin(u)
z2 = (v - pi/2) * a1 / (pi/2)
ax.plot_wireframe(x2, y2, z2, color='g')

x3 = a2 * cos(u[:,0]) + xoff
y3 = a2 * sin(u[:,0])
zsq = (a1**2 - x3**2 - y3**2)
mask = where(zsq > 0)
x3 = x3[mask]
y3 = y3[mask]
z3 = zsq[mask] ** 0.5
ax.plot(x3, y3, z3, color='r')
ax.plot(x3, y3, -z3, color='r')
...

【讨论】:

  • 我对搅拌机一无所知 XD 我真正想要的,你所说的,圆柱体和形成曲线的球体的交点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 2013-05-04
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多