如何在pythonOCC中使用样条函数?

2024-09-20 22:58:47 发布

您现在位置:Python中文网/ 问答频道 /正文

关于如何在pythonOCC中使用样条函数,我有一个由两部分组成的问题。在

首先,我知道我可以用

array = []
array.append(gp_Pnt2d (0,0))
array.append(gp_Pnt2d (1,2))
array.append(gp_Pnt2d (2,3))
array.append(gp_Pnt2d (4,3))
array.append(gp_Pnt2d (5,5))

pt2d_list = point2d_list_to_TColgp_Array1OfPnt2d(array)
SPL1      = Geom2dAPI_PointsToBSpline(pt2d_list).Curve()
display.DisplayShape(make_edge2d(SPL1) , update=True)

我希望bspline可以通过

^{pr2}$

但我如何得到:

  1. bspline的导数?在
  2. bspline的结?在
  3. 结是pt2d_列表吗?在
  4. bspline的控制点?在
  5. 样条曲线的系数?在

如何移除或添加结到bsline?在

其次,在pythonOCC中加载CAD drawing.stp文件时,如下所示:

from OCC import TopoDS, StlAPI
shape = TopoDS.TopoDS_Shape()
stl_reader = StlAPI.StlAPI_Reader()
stl_reader.Read(shape,str(filename))
display.DisplayShape(shape)

如何从形状中获取数据,如节点、bspline和系数。在


Tags: displayarraylist样条gpshapeappendpythonocc
2条回答

我用了python-boost来实现这个目标。 检查这个函数:http://letslearncomputing.blogspot.com/2013/04/c-program-for-cubic-spline-interpolation.html 你可以在这里得到你想要的5个值。在

您只需将代码修改为C++(而不是C

BOOST_PYTHON_MODULE(Spline)
{
    import_array();
    boost::python::numeric::array::set_module_and_type("numpy", "ndarray");
    class_<Spline, Spline*>("Spline", init<>())
        .def("spline", &Spline::spline)
        ;
}

因此在Python中可以使用:

^{pr2}$

Cpp等级:

^{3}$

然后在boost::python::list Spline::spline(numeric::array& x_val, numeric::array& y_val, double p)函数中得到:

PyArrayObject* x_pyArr = (PyArrayObject*)PyArray_FROM_O(x_val.ptr());

PyArrayObject* y_pyArr = (PyArrayObject*)PyArray_FROM_O(y_val.ptr());
int size = *(x_pyArr->dimensions), i , j;    
double* data_x = (double*)x_pyArr->data;
double* data_y = (double*)y_pyArr->data;
double h[NUMBER_OF_SAMPLES], a, b, c, d, s[NUMBER_OF_SAMPLES] = { 0 }, F[NUMBER_OF_SAMPLES], f[NUMBER_OF_SAMPLES], x[NUMBER_OF_SAMPLES], m[NUMBER_OF_SAMPLES][NUMBER_OF_SAMPLES] = { 0 }, temp;

for (int i = 0; i < size; i++)
{
    x[i] = *(data_x + i);
    f[i] = *(data_y + i);
}

依此类推。我在Spline::spline函数中返回一个python列表:

boost::python::list return_val;
// ....
return_val.append(sum);
return_val.append(result);
return return_val;

我将查看scipy documentation并在那里搜索您试图应用的函数。在

相关问题 更多 >

    热门问题