# pythonocc进阶学习：曲线拟合（插值 Interpolation/逼近 Approximation）

### 2d

• 使用插值法：
``````from OCC.Core.Geom2dAPI import Geom2dAPI_Interpolate
from OCC.Core.TColgp import TColgp_HArray1OfPnt2d
from OCC.Core.gp import  gp_Pnt2d
from OCC.Display.SimpleGui import init_display

points=[]

points=TColgp_HArray1OfPnt2d(1,3)
p1=gp_Pnt2d(0,1)
p2=gp_Pnt2d(2,1)
p3=gp_Pnt2d(6,-3)

points.SetValue(1,p1)
points.SetValue(2,p2)
points.SetValue(3,p3)
interp=Geom2dAPI_Interpolate(points,False,0.0001)
interp.Perform()

display.DisplayShape(interp.Curve(),update=True)
display.DisplayShape(p1)
display.DisplayShape(p2)
display.DisplayShape(p3)

start_display()
``````
• 使用逼近法Approximation：

Geom2dAPI类下的 Geom2dAPI_PointsToBSpline 可以允许建立2D BSpline曲线, 这用来逼近一系列的点。

``````from OCC.Core.Geom2dAPI import  Geom2dAPI_PointsToBSpline
from OCC.Core.TColgp import TColgp_Array1OfPnt2d
from OCC.Core.gp import  gp_Pnt2d
from OCC.Display.SimpleGui import init_display

points=TColgp_Array1OfPnt2d(1,3)
p1=gp_Pnt2d(0,1)
p2=gp_Pnt2d(2,1)
p3=gp_Pnt2d(6,-3)

points.SetValue(1,p1)
points.SetValue(2,p2)
points.SetValue(3,p3)
approx=Geom2dAPI_PointsToBSpline(points)

display.DisplayShape(approx.Curve(),update=True)
display.DisplayShape(p1)
display.DisplayShape(p2)
display.DisplayShape(p3)

start_display()
``````

### 3d

• 使用插值法：Interpolation
``````from OCC.Core.GeomAPI import GeomAPI_Interpolate
from OCC.Core.TColgp import TColgp_HArray1OfPnt
from OCC.Core.gp import gp_Pnt
from OCC.Display.SimpleGui import init_display

points=[]

points=TColgp_HArray1OfPnt(1,3)
p1=gp_Pnt(0,1,2)
p2=gp_Pnt(2,1,3)
p3=gp_Pnt(6,2,1)

points.SetValue(1,p1)
points.SetValue(2,p2)
points.SetValue(3,p3)
interp=GeomAPI_Interpolate(points,False,0.0001)
interp.Perform()

display.DisplayShape(interp.Curve(),update=True)
display.DisplayShape(p1)
display.DisplayShape(p2)
display.DisplayShape(p3)

start_display()
``````
• 逼近法
GeomAPI类下的 GeomAPI_PointsToBSpline 可以允许建立3D BSpline曲线, 这用来逼近一系列的点。
``````from OCC.Core.GeomAPI import GeomAPI_PointsToBSpline
from OCC.Core.TColgp import  TColgp_Array1OfPnt
from OCC.Core.gp import gp_Pnt
from OCC.Display.SimpleGui import init_display

points=TColgp_Array1OfPnt(1,3)
p1=gp_Pnt(0,1,2)
p2=gp_Pnt(2,1,3)
p3=gp_Pnt(6,2,1)

points.SetValue(1,p1)
points.SetValue(2,p2)
points.SetValue(3,p3)
approx=GeomAPI_PointsToBSpline(points)

display.DisplayShape(approx.Curve(),update=True)
display.DisplayShape(p1)
display.DisplayShape(p2)
display.DisplayShape(p3)

start_display()
``````