5
$\begingroup$

I am constructing Naca type profiles with Bezier curves.

controlPoints={{1, 0.}, {0.863924,0.00448168}, {0.78316,-0.019}, {0.444, -0.019}, 
  {0.269064,-0.019}, {0,-0.014478}, {0, 0}, {0, 0.017794}, {0.236028, 0.041}, 
  {0.442,0.041}, {0.616096,0.041}, {0.70006,0.0378152}, {1,0.}};

bezProfile = BezierFunction[controlPoints];

Show[Graphics[{Orange, BezierCurve[controlPoints], Red, 
   Point[controlPoints], Green, Line[controlPoints]},
   Axes -> True], ParametricPlot[bezProfile[t], {t, 0, 1}]]

Result

The BezierFunction gives a very different results over the BezierCurve which is wrong !!

Any explanation ??

$\endgroup$
  • 3
    $\begingroup$ Please do not use the bugs tag when posting questions. See the tag description. If you do suspect a bug, always mention your Mathematica version. $\endgroup$ – Szabolcs Nov 29 '18 at 8:40
  • 2
    $\begingroup$ use BezierCurve[controlPoints, SplineDegree -> (Length@controlPoints - 1)]? $\endgroup$ – kglr Nov 29 '18 at 8:42
5
$\begingroup$

Use the option SplineDegree -> (Length@controlPoints - 1) with BezierCurve:

Show[Graphics[{Orange, Thick, 
    BezierCurve[controlPoints, SplineDegree -> (Length@controlPoints - 1)], 
    Red, Point[controlPoints], Green, Line[controlPoints]}, Axes -> True], 
 ParametricPlot[bezProfile[t], {t, 0, 1}, 
  PlotStyle -> Directive[Thickness[.01], Opacity[.5]]], 
 AspectRatio -> 1/GoldenRatio]

enter image description here

BezierCurve >> Details and Options:

BezierCurve by default represents a composite cubic Bézier curve.

Graphics[{Orange, Thick, BezierCurve[controlPoints], 
  Thickness[.01], Opacity[.3], Blue, 
  BezierCurve[controlPoints, SplineDegree -> 3]},
Axes -> True, AspectRatio -> 1/GoldenRatio]

enter image description here

| improve this answer | |
$\endgroup$
  • $\begingroup$ Thank you for swift reply. The BezierFunction does not have SplineDegree as an option only the BezierCurve has Why ? The correct curve is the last one you plotted with y=0 for x=0 and x=1. Should I split the curve in upper and lower one or are there other solutions. $\endgroup$ – Maarten Mostert Nov 29 '18 at 10:51
  • $\begingroup$ @MaartenMostert For composite bezier functions there is BSplineFunction $\endgroup$ – Coolwater Nov 29 '18 at 11:02
  • $\begingroup$ @MaartenMostert, can you use BSplineCurve and BSplineFunction instead of BezierCurve and BezierFunction? $\endgroup$ – kglr Nov 29 '18 at 11:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.