7
$\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
  • 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$ Commented Nov 29, 2018 at 8:40
  • 2
    $\begingroup$ use BezierCurve[controlPoints, SplineDegree -> (Length@controlPoints - 1)]? $\endgroup$ Commented Nov 29, 2018 at 8:42
  • 3
    $\begingroup$ Does this answer your question? SplineDegree->1 does not work with BezierFunction? $\endgroup$ Commented Aug 6, 2022 at 16:33

1 Answer 1

6
$\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

$\endgroup$
3
  • $\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$ Commented Nov 29, 2018 at 10:51
  • $\begingroup$ @MaartenMostert For composite bezier functions there is BSplineFunction $\endgroup$ Commented Nov 29, 2018 at 11:02
  • $\begingroup$ @MaartenMostert, can you use BSplineCurve and BSplineFunction instead of BezierCurve and BezierFunction? $\endgroup$ Commented Nov 29, 2018 at 11:11

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.