2013-10-14 10 views
18

मेरे पास pythonOCC में splines का उपयोग करने के बारे में दो भाग का सवाल है।मैं pythonOCC में splines का उपयोग कैसे करूं?

सबसे पहले, मुझे पता है कि मैं

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 द्वारा

BSPL1  = Geom2dAPI_PointsToBSpline(pt2d_list) 

गणना की जा सकती लेकिन मैं कैसे मिलता है:

  1. बीएसपीलाइन का व्युत्पन्न?
  2. बीएसपीलाइन के नॉट्स?
  3. क्या knots pt2d_list है?
  4. बीएसपीलाइन के नियंत्रण बिंदु?
  5. स्पलीन के गुणांक?

और मैं bspline पर नॉट्स को कैसे हटा या जोड़ूं?

दूसरे, जब इस तरह pythonOCC में एक सीएडी ड्राइंग .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, और गुणांक आकार के बाहर डेटा प्राप्त करते हैं।

+0

क्या आपको कहीं और जवाब मिल गए थे? क्या आप उन्हें हमारे साथ साझा कर सकते हैं: डी? – Jiloc

+0

निराशाजनक पुराने ................. –

उत्तर

0

मैं scipy documentation पर एक नज़र डालेगा और उन कार्यों के लिए खोज करूँगा जिन्हें आप आवेदन करने का प्रयास कर रहे हैं।

+0

यह एक टिप्पणी होनी चाहिए, न कि जवाब। – Daniel

0

मैंने python-boost का उपयोग किया है इसे प्राप्त करें। इस फ़ंक्शन को देखें: http://letslearncomputing.blogspot.com/2013/04/c-program-for-cubic-spline-interpolation.html आप यहां अपने कुछ वांछित 5 मान प्राप्त कर सकते हैं।

from Spline.Spline import * 
operation = Spline() 
value, error_ = operation.spline(np.array(your_x_array), np.array(your_y_array), 0.01) 

सीपीपी वर्ग:

#define NUMBER_OF_SAMPLES 14 
class Spline 
{ 
public: 
    boost::python::list spline(numeric::array& x_val, numeric::array& y_val, double look_up_val); 
}; 

फिर

तुम बस 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) 
     ; 
} 

तो अजगर में आप उपयोग कर सकते हैं होने के लिए कोड संशोधित करना होगा 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 फ़ंक्शन में एक पायथन सूची लौटाता हूं:

boost::python::list return_val; 
// .... 
return_val.append(sum); 
return_val.append(result); 
return return_val; 
संबंधित मुद्दे