python求球的表面积_python-Hypar的表面积(双曲线抛物面)

给定定义doubly ruled hyperbolic paraboloid的四个点(p0,p1,p2,p3),使用python的numpy模块计算表面积的最佳(最快)方法是什么?

7iKxTMO.jpg

解决方法:

这比编程更多的是数学运算,因此您可能想与math.stackexchange的人们进行核对.但是,从上一个问题的答案开始,可以将表面参数化为:

s = p0 + u * (p1 - p0) + v * (p3 - p0) + u * v * (p2 - p3 - p1 + p0) =

p0 + u * a + v * b + u * v * c

您的四个点所限制的面积为0< = u&=; 1和0< = v< = 1.

您可以通过微分获得与表面相切的两个向量:

t1 = ds/du = a + v * c

t2 = ds/dv = b + u * c

然后,您可以获得一个正交于其他两个矢量的范数,该矢量等于它们描述的平行四边形的面积,并取它们的叉积:

A = t1 x t2 = a x b + u * a x c + v * c x b

继续集成A是很诱人的,但是要集成它是它的规范,而不是向量本身.我尝试将其提供给Mathematica,以查看它是否可以提供一些不错的封闭式解决方案,但是现在已经进行了几分钟,却没有到达任何地方.因此,您也可以用数字来做事情:

def integrate_hypar(p0, p1, p2, p3, n=100):

a = p1 - p0

b = p3 - p0

c = p2 - p3 - p1 + p0

delta = 1 / n

u = np.linspace(0,1, num=n, endpoint=False) + delta / 2

axb = np.cross(a, b)

axc = np.cross(a, c)

cxb = np.cross(c, b)

diff_areas = (axb + u[:, None, None] * axc +

u[:, None] * cxb) * delta * delta

diff_areas *= diff_areas

diff_areas = np.sum(diff_areas, axis=-1)

diff_areas = np.sqrt(diff_areas)

return np.sum(diff_areas)

有了其他问题的数据,我得到:

p0 = np.array([1.15, 0.62, -1.01])

p1 = np.array([1.74, 0.86, -0.88])

p2 = np.array([1.79, 0.40, -1.46])

p3 = np.array([0.91, 0.79, -1.84])

>>> integrate_hypar(p0, p1, p2, p3)

0.54825122958719719

标签:3d,python,math,numpy

来源: https://codeday.me/bug/20191122/2062143.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值