【问题标题】:Using python, I am looking to plot a 3D spherical cap with a given radius r使用 python,我正在寻找具有给定半径 r 的 3D 球冠
【发布时间】:2015-06-17 08:24:01
【问题描述】:

我正在寻找一个小程序,它将在给定参数 h 和 a 的情况下生成 spherical cap 的 3D 图。

任何帮助将不胜感激!

我从一个 matplotlib 示例开始绘制一个球体...

我想为 a 和 h 输入一个值,得到相应的球体半径,然后绘制一个高度为 h 和底半径为 a 的球冠。理想情况下,3d 图上的 z 轴和 x y 轴将对应于我输入的初始 a 和 h(只要我认为它具有几何意义?)

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

def capRatio(r, a, h):
    '''cap to sphere ratio'''
    surface_cap = np.pi * (a**2 + h**2)
    surface_sphere = 4.0 * np.pi * r**2
    return surface_cap/surface_sphere

def findRadius(a, h):
    "find radius if you have cap base radius a and height"
    r = (a**2 + h**2) / (2*h)
    return r

#choose a and h
a = 4
h = 3
r = findRadius(a,h)
p = capRatio(r, a, h) # Ratio of sphere to be plotted, could also be a function of a.
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, p*np.pi, 100)

x = r * np.outer(np.cos(u), np.sin(v))
y = r * np.outer(np.sin(u), np.sin(v))
z = r * np.outer(np.ones(np.size(u)), np.cos(v)) 

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, rstride=4, cstride=4, alpha=0.3 , cmap= cm.winter)
plt.show()

【问题讨论】:

  • 您的实际问题是什么?你有没有尝试过?
  • 非常抱歉,网站新手!通过遵循 matplotlib 示例,我可以在主帖中添加一个球体,从概念上讲,我不确定如何从那里前进到仅绘制一个上限……或者这是否是正确的方法

标签: python matplotlib plot 3d geometry


【解决方案1】:

下一部分是限制您将接受的坐标范围,这可以通过几种方式完成。这是一种似乎可行的方法:

p = 0.8 # Ratio of sphere to be plotted, could also be a function of a.

u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, p*np.pi, p*100)

【讨论】:

  • 您好,感谢您的帮助!我已经采纳了您的建议,取得了一些进展,但仍然没有像我希望的那样完全发挥作用。
猜你喜欢
  • 2021-07-02
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
相关资源
最近更新 更多