空间中,已知起始点与末点的坐标与方向向量,如何将满足这四个条件的空间圆柱螺旋曲线路径参数化,另还可以转化为高效率的代码

问题遇到的现象和发生背景

空间中,已知起始点与末点的坐标与方向向量,如何将满足这四个条件的空间圆柱螺旋曲线路径参数化,另还可以转化为高效率的代码。
既然是螺旋曲线,就可以转很多圈,在这里只取在第一圈以内就到达末点的情况。
螺旋曲线是在空间中任意位置的,任意角度的。

我的解答思路和尝试过的方法

根据在@Marc Pony 的帖子中的学习

三维空间任意一点绕任意轴线旋转_Marc Pony的博客-CSDN博客_三维空间绕任意轴旋转

只需要在最终结果后面在加上一个轴线单位方向向量n向量乘α再乘一个轴向速度常数b即可得到任意位置的圆柱螺旋曲线参数方程,求偏导就是关于方向向量的方程,理论上带入四个条件将方程解出就可以得到旋转轴和中心点的参数。但是现在的问题是,计算上方程过于复杂,无法解出。另外,如果用最小二乘法之类的代码解方程,效率又太低,虽然还没有实践过,但预计绝对在1s以上。

我想要达到的结果

最终想要的效果是,当旋转α从初始点到末点时,在这个过程中,能知道任意位置的方向和坐标,例如:0.1α,0.9α时。
因为这只是一小部分,拿着这个的计算结果去做最优化,因此要经过百万千万次的计算,所以这一步计算效率一定要高,最好是能直接推导出公式,瞬间跑出来的代码。这也是我放弃最小二乘法等方法的原因,即使计算时间只有1s也吃不消。

如果没有理解错的话,题主的问题应该是空间旋转的轴角描述——围绕旋转轴旋转指定角度,而轴角一般都转化为旋转向量,旋转角度用旋转向量的模长表示。本质上,空间旋转不管是用欧拉角,还是轴角,抑或是四元组来描述,最终都转化为旋转矩阵。基于C的Python科学计算工具包scipy提供了一个空间旋转的工具,速度大约是毫秒级。题主如有兴趣,可以参考。

>>> import numpy as np
>>> from scipy.spatial.transform import Rotation
>>> def rotate(points, axis, theta): 
    """旋转函数,points是参与旋转的点,axis是旋转轴,theta是旋转角度"""
    points = np.array(points)
    axis = np.array(axis)
    theta = np.radians(theta)
    r = Rotation.from_rotvec(theta*axis/np.linalg.norm(axis))
    return r.apply(points)

>>> points = [[1,0,0],[0,0,1]] # 用两个点测试
>>> axis = [0,1,0] # 围绕y轴旋转
>>> theta = 90 # 旋转90°
>>> rotate(points, axis, theta) # 结果正确
array([[ 0.,  0., -1.],
       [ 1.,  0.,  0.]])