Python 螺旋面交点
如何使用修改Python代码找到螺旋线x=Rcost,y=Rsint,z=a*t与平面n-平面法向量和p0-平面上点的交点?谢谢Python 螺旋面交点,python,intersection,curve,plane,Python,Intersection,Curve,Plane,如何使用修改Python代码找到螺旋线x=Rcost,y=Rsint,z=a*t与平面n-平面法向量和p0-平面上点的交点?谢谢 在文章中,有关于如何对两点定义的直线做这样的事情的答案,但我需要螺旋线的解。你需要解方程ht-p0.n=0,其中ht是你的螺旋线 该方程不允许使用简单的解析解,但您可以用数值方法求解,例如scipy: import numpy as np from scipy import optimize n = np.array([nx, ny, nz]) p0 = np.ar
在文章中,有关于如何对两点定义的直线做这样的事情的答案,但我需要螺旋线的解。你需要解方程ht-p0.n=0,其中ht是你的螺旋线 该方程不允许使用简单的解析解,但您可以用数值方法求解,例如scipy:
import numpy as np
from scipy import optimize
n = np.array([nx, ny, nz])
p0 = np.array([p0x, p0y, p0z])
def h(t):
return np.array([R*np.cos(t), R*np.sin(t), a*t])
res = optimize.minimize_scalar(lambda t: np.dot(h(t) - p0, n))
print(res.x)
如果没有scipy/numpy,那么在这种特定情况下,我们可以解析地计算ht的导数。纯python版本:
from math import cos, sin
n = [nx, ny, nz]
p0 = [p0x, p0y, p0z]
def dot(a, b):
return sum([x*y for x, y in zip(a, b)])
def h(t):
return [R*cos(t), R*sin(t), a*t]
def hp(t): # the derivative of h
return [-R*sin(t), R*cos(t), a]
def find_root_newton(x, f, fp, epsilon=1e-5):
xn = x + 2*epsilon
while(abs(xn - x) > epsilon):
x = xn
xn = x - f(x)/fp(x)
return xn
t = find_root_newton(0., lambda t: dot(h(t), n) - dot(p0, n),
lambda t: dot(hp(t), n))
print(h(t))
如果螺旋线的轴在平面内,则可能会失败,在这种情况下,您的问题定义得很糟糕,而且效率不高。请注意,解决方案可能不是唯一的。谢谢您的帮助。我会努力的。我没有提到它应该与Abaqus中的Python一起工作,因为Abaqus没有SciPy。我将首先安装SciPy,看看它是否能在Abaqus中工作。还有别的办法吗?嗨,bombadilhom,非常感谢你的帮助。您说过Numpy也不是必需的,但在代码中可以看到“np”。那么,这意味着什么?另外,当我运行代码时,我得到了NameError:全局名称“h”没有定义。这是什么?我的意思是,虽然我写的代码使用numpy,但没有它也很容易h'在代码的第一部分中定义。我编辑这篇文章是为了编写一个不使用numpy的独立版本。代码完全按照它应该的方式工作。非常感谢您的帮助。经过进一步验证,我发现计算不正确:在所附图片中,计算点位于平面Y-X视图上,但不在螺旋Y-Z视图上。如何更改代码以获得正确的结果?非常感谢。不知道如何附加png文件。