Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 螺旋面交点_Python_Intersection_Curve_Plane - Fatal编程技术网

Python 螺旋面交点

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

如何使用修改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.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文件。