EEE_yahol 2021-01-12 20:36 采纳率: 0%
浏览 63

已经B样条曲线相关参数,求曲线上的点对。求教,

如题,已知条件,控制点组P1(354.412,262.869),P2(350.664673,259.527466),P3(346.917114,256.186279),P4(343.349579,252.655045),P5(341.895264,251.215576),P6(340.471039,249.744522),P7(339.16684,248.163193),P8(337.932648,246.666809),P9(336.806213,245.071609),P10(335.908783,243.354874),P11(335.255249,242.104706),P12(334.723389,240.790054),P13(334.360901,239.418625),P14(334.026154,238.151749),P15(333.835938,236.836426),P16(333.885956,235.540405),P17(333.943298,234.052368),P18(334.317261,232.589813),P19(334.691193,231.127258),   节点矢量集合(0,0,0,0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,6);

控制点个数19个,节点数23,3阶,求曲线各个点对!求大佬教,研究好几天了,不知道怎么算

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-24 16:20
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要解决这个问题,我们可以使用B样条插值方法。在Python中,可以使用scipy库的splev函数来实现这一点。

    下面是一个简单的示例:

    from scipy.interpolate import splev
    
    # 控制点和节点矢量
    control_points = [p[0] for p in [[354.412, 262.869], [350.6647, 259.5274], [346.9171, 256.1863], ..., [334.3173, 232.5898]]
    nodes = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
    
    # 获取节点矢量的长度
    node_count = len(nodes)
    
    # 创建一个矩阵,表示节点之间的关系
    edge_matrix = np.zeros((node_count-1, node_count), dtype=int)
    for i in range(node_count):
        edge_matrix[i][i+1] = 1
    
    # 使用Splev函数进行插值
    curve = splev(nodes, control_points, edge_matrix=edge_matrix)
    
    print(curve)
    

    这段代码首先创建了一个包含所有控制点的列表,并将它们转换为一维数组。然后,它计算出节点之间的连接关系,并创建了一个二维矩阵来存储这些关系。最后,它使用这个矩阵通过Splev函数来获取每个节点对应的新位置。

    注意:这个例子中的控制点是按照顺序排列的,所以你需要确保你的控制点列表也按此顺序排列。此外,你可能需要根据实际的数据调整控制点的位置。

    如果你想要更复杂的插值或处理多个控制点的情况,请查看scipy.splprep文档以了解更多详细信息。

    评论

报告相同问题?