贝塞尔曲线有着很多特殊的性质, 在图形设计和路径规划中应用都非常广泛。
贝塞尔曲线完全由其控制点决定其形状, n个控制点对应着n-1阶的贝塞尔曲线,并且可以通过递归的方式来绘制。
一阶:
二阶:
高阶:
OpenCascade提供绘制贝塞尔曲线方法,参考代码如下:
void makeCurve(OccView* view)
{
// Define points.
gp_Pnt aPnt1(0.0, 0.0, 0.0);
gp_Pnt aPnt2(5.0, 5.0, 0.0);
gp_Pnt aPnt3(10.0, 5.0, 0.0);
gp_Pnt aPnt4(15.0, 0.0, 0.0);
// Add points to the curve poles array.
TColgp_Array1OfPnt aPoles(1, 4);
aPoles.SetValue(1, aPnt1);
aPoles.SetValue(2, aPnt2);
aPoles.SetValue(3, aPnt3);
aPoles.SetValue(4, aPnt4);
// Define Bezier weights.
TColStd_Array1OfReal aBezierWeights(1, 4);
aBezierWeights.SetValue(1, 0.5);
aBezierWeights.SetValue(2, 1.5);
aBezierWeights.SetValue(3, 1.5);
aBezierWeights.SetValue(4, 0.5);
// Create Bezier curve.
Handle(Geom_BezierCurve) aBezierCurve = new Geom_BezierCurve(aPoles, aBezierWeights);
Handle(AIS_ColoredShape) anAisBezierCurve = new AIS_ColoredShape(
BRepBuilderAPI_MakeEdge(aBezierCurve).Shape());
anAisBezierCurve->SetColor(Quantity_Color(Quantity_NOC_BLUE));
Handle(AIS_TextLabel) aisLabel = new AIS_TextLabel();
aisLabel->SetHeight(fontHeight);
aisLabel->SetText("Bezier edge");
aisLabel->SetPosition(aPnt3);
aisLabel->SetColor(Quantity_Color(Quantity_NOC_BLUE));
myObject3d.Append(aisLabel);
}
在《OpenCascade插件化三维算法研究平台》上效果展示如下: