BezierCurve[{p1,p2,…}]
制御点 piを持つベジエ(Bézier)曲線を表す.
BezierCurve
BezierCurve[{p1,p2,…}]
制御点 piを持つベジエ(Bézier)曲線を表す.
詳細とオプション
- BezierCurveは,ベジエスプライン曲線あるいはベルンシュタイン(Bernstein)多項式曲線としても知られている.
- BezierCurveは,通常,フォントやベクターグラフィックスの曲線経路を表すために使われる.
- 制御点 piは,{x,y}や{x,y,z}のような通常の座標である.
- BezierCurve[{p1,p2,p3,p4}]は,単純な三次元ベジエ曲線を表す.
- 5つ以上の制御点があるBezierCurveは,複合三次ベジエ曲線を表す.
- 複合曲線は,複数のベジエセグメントを使ってより多様な形状が表現できる.C
- BezierCurveは,幾何学領域およびグラフィックスプリミティブとして使うことができる.
- グラフィックスでは,点 piは,Scaled,Offset,ImageScaled,Dynamicの式でよい.
- グラフィックスの描画は,Thickness,Dashing,JoinForm,CapForm,および色等の指示子の影響を受ける.
- 以下は,指定可能なオプションである.
-
SplineDegree Automatic 多項式基底の次数 SplineClosed False 曲面を閉じたものにするかどうか - オプションSplineDegree->d は,もとになる多項式基底の最大次数が d となるように指定する.
- SplineDegree->d のとき,d+1個の制御点を持つBezierCurveは,単純な次数 d のベジエ曲線を与える.制御点がより少ない場合は,より低次数の曲線が生成される.制御点がより多い場合は,複合ベジエ曲線が生成される.
- n 個の制御点を持つ次数 d のBezierCurveは,領域{
}を表す.ここで,
は次数 d の k
番目のベルンシュタイン基底関数である.
例題
すべて開く すべて閉じる例 (3)
pts = {{0, 0}, {1, 1}, {2, -1}, {3, 0}};Graphics[{BezierCurve[pts], Dashed, Gray, Line[pts], Red, Point[pts]}]pts = {{0, 0, 0}, {1, 1, 1}, {2, -1, 1}, {3, 0, 2}}Graphics3D[{BezierCurve[pts], Dashed, Gray, Line[pts], Red, Point[pts]}]reg = BezierCurve[{{0, 0}, {1, 1}, {2, -1}}];ArcLength[reg]RegionBounds[reg]Graphics[{LinearGradientFilling[{StandardRed, StandardYellow}], EdgeForm[Thick], FilledCurve[BezierCurve[IconizedObject[«[image]»]]]}]スコープ (26)
基本的な用法 (4)
Graphics[BezierCurve[{{0, 0}, {2, 1}}]]Graphics[BezierCurve[{{-3, 0}, {6, 5}, {-6, -5}, {3, 0}}]]Graphics[BezierCurve[{{-1, 3}, {-2, 0}, {2, 0}, {1, 3}}]]Graphics[BezierCurve[{{0, 1}, {-1, 0}, {1, 0}}, SplineClosed -> True]]Graphics[{FilledCurve[BezierCurve[IconizedObject[«[image]»]]]}]Graphics[BezierCurve[IconizedObject[«[image]»]]]BezierCurve[{{-3, 0}, {6, 5}, {-6, -5}, {3, 0}}]指定 (4)
Graphics[BezierCurve[{{-1, 0}, {0, 2}, {1, 0}}]]Graphics3D[BezierCurve[{{-1, 0, 0}, {0, 2, 1}, {1, 0, 0}}]]Graphics[BezierCurve[{{-3, 0}, {6, 5}, {-6, -5}, {3, 0}}]]Graphics3D[BezierCurve[{{-3, -1, 0}, {6, 5, 5}, {-6, -5, -5}, {3, 1, 0}}]]一般に,単純な次数 d のベジエ曲線には(d+1)個の制御点が必要である:
pts = {{0, 0}, {(1/3), (Sqrt[3]/2)}, {(2/3), (Sqrt[3]/2)}, {1, 0}, {(4/3), (Sqrt[3]/2)}, {(5/3), (Sqrt[3]/2)}, {2, 0}};deg = Length[pts] - 1;BezierCurve[pts, SplineDegree -> deg]Graphics[%]BezierCurve[Take[pts, 4], SplineDegree -> deg]Graphics[%]BezierCurve[pts, SplineDegree -> 3]Graphics[%]Graphics[{BezierCurve[{{-2, 0}, {-1, 2}, {1, 2}, {2, 0}}]}]Graphics[{BezierCurve[{{-2, 0}, {-1, 2}, {1, 2}, {2, 0}}, SplineClosed -> True]}]グラフィックス (12)
Table[Graphics[{c, BezierCurve[{{0, 0}, {1, 2}, {3, 2}, {4, 0}}]}], {c, {RGBColor[0.93, 0.27, 0.27], RGBColor[0.14, 0.8, 0.14], RGBColor[0.4, 0.6, 1]}}]Table[Graphics[{Thickness[i], BezierCurve[{{0, 0}, {1, 2}, {3, 2}, {4, 0}}]}], {i, {Tiny, Small, Medium, Large}}]Table[Graphics[{t, BezierCurve[{{0, 0}, {1, 2}, {3, 2}, {4, 0}}]}], {t, {Thin, Thick}}]PlotRangeと相対的にスケールされた太さ:
Table[Graphics[{Thickness[i], BezierCurve[{{0, 0}, {1, 2}, {3, 2}, {4, 0}}]}], {i, {.005, .05, .1}}]Table[Graphics[{AbsoluteThickness[i], BezierCurve[{{0, 0}, {1, 2}, {3, 2}, {4, 0}}]}], {i, {1, 5, 10}}]Table[Graphics[{Dashing[i], BezierCurve[{{0, 0}, {1, 2}, {3, 2}, {4, 0}}]}], {i, {Tiny, Small, Medium, Large}}]Table[Graphics[{d, BezierCurve[{{0, 0}, {1, 2}, {3, 2}, {4, 0}}]}], {d, {Dotted, Dashed, DotDashed}}]Opacityは曲線の透明度を決定する:
Table[Graphics[{Opacity[o], BezierCurve[{{0, 0}, {1, 2}, {3, 2}, {4, 0}}]}], {o, {0.1, 0.5, 0.9}}]EdgeFormを使ってFilledCurveの境界として使われている曲線のスタイルが指定できる:
Graphics[{EdgeForm[{StandardBlue, Thick}], Opacity[0.1], FilledCurve[BezierCurve[{{0, 0}, {1, 2}, {3, 2}, {4, 0}}]]}]BezierCurveは,2DのArrowの曲線として使用できる:
Graphics[{Arrowheads[Large], Arrow[BezierCurve[{{0, 0}, {1, 2}, {3, 2}, {4, 0}}]]}]Graphics3D[{Arrowheads[Large], Arrow[BezierCurve[{{0, 0, 0}, {1, 2, 2}, {3, 2, 02}, {4, 0, 0}}]]}]3Dでは,BezierCurveはTubeの曲線として使用できる:
Graphics3D[{Tube[BezierCurve[{{0, 0, 0}, {1, 2, 2}, {3, 2, 02}, {4, 0, 0}}], 0.1]}]Graphics3D[{Arrowheads[0.2], Arrow[Tube[BezierCurve[{{0, 0, 0}, {1, 2, 2}, {3, 2, 02}, {4, 0, 0}}], 0.1]]}]BezierCurveはGraphicsComplexで使うことができる:
Graphics[{GraphicsComplex[{{0, 0}, {1, 2}, {3, 2}, {4, 0}}, BezierCurve[{1, 2, 3, 4}]]}]pts = {{0, 0}, {(1/4), 1}, {(3/4), 1}, {1, 0}};Table[Graphics[{BezierCurve[pts]}, Frame -> True, PlotRange -> {{0, pr}, {0, pr}}], {pr, {1, 2, 4}}]Scaledを使って制御点をPlotRangeと相対的に指定する:
Table[Graphics[{BezierCurve[Map[Scaled, pts]]}, Frame -> True, PlotRange -> {{0, pr}, {0, pr}}], {pr, {4, 8, 16}}]ImageScaledを使って制御点を2Dの全体画像領域と相対的に指定する:
Table[Graphics[{BezierCurve[Map[ImageScaled, pts]]}, Frame -> True, PlotRange -> {{0, pr}, {0, pr}}], {pr, {4, 8, 16}}]Offsetを使って2Dの制御点に絶対オフセットを適用する:
pts = {{0, 0}, {(1/4), 1}, {(3/4), 1}, {1, 0}};offsets = {{-80, 0}, {0, 0}, {80, 0}};Graphics[{Table[BezierCurve[Map[Offset[offset, #]&, pts]], {offset, offsets}]}, PlotRange -> {{-1.4, 2.4}, {-0.1, 1}}, ImageSize -> 250]制御点はDynamicになりうる:
DynamicModule[{z = 0, pts},
pts = {{Dynamic[{0, z}], {1, 2}, {3, 2}, {4, 0}}};
{Slider[Dynamic[z], {0, 4}], Graphics[{BezierCurve[pts]}]}]領域 (6)
reg = BezierCurve[{{Subscript[c, 1], Subscript[c, 2]}, {Subscript[c, 3], Subscript[c, 4]}, {Subscript[c, 5], Subscript[c, 6]}}];RegionEmbeddingDimension[reg]RegionDimension[reg]reg = BezierCurve[{{0, 0}, {1, 2}, {3, 2}, {4, 0}}];{RegionMember[reg, {0, 0}], RegionMember[reg, {0, 1}]}reg = BezierCurve[{{0, 0}, {1, 2}, {2, 0}}];{ArcLength[reg], RegionMeasure[reg]}c = RegionCentroid[reg]Show[Region[reg], Graphics[{LightDarkSwitched[Black, White], Point[c]}]]reg = BezierCurve[{{-1, -1}, {0, 1}, {1, -1}}];{RegionDistance[reg, {-1, -1}], RegionDistance[reg, {2, 2}]}Show[Region[reg], ContourPlot[Evaluate@RegionDistance[reg, {x, y}], {x, -4, 4}, {y, -4, 3}, Contours -> {1, 2, 3}, ...], Frame -> True]reg = BezierCurve[{{-1, -1}, {0, 1}, {1, -1}}];{SignedRegionDistance[reg, {-1, -1}], SignedRegionDistance[reg, {2, 2}]}reg = BezierCurve[{{-1, -1}, {0, 1}, {1, -1}}];BoundedRegionQ[reg]bb = CoordinateBoundingBox[reg]Show[Region[reg], Graphics[{Opacity[0.1], EdgeForm[Dashed], Cuboid@@bb}]]オプション (3)
SplineDegree (2)
デフォルトで,4つ以上の制御点を持つBezierCurveは次数3を使う:
pts = Table[{i, (-1) ^ i}, {i, 10}];{BezierCurve[Take[pts, 4]], BezierCurve[Take[pts, 10]]}{BezierCurve[Take[pts, 2]], BezierCurve[Take[pts, 3]]}SplineDegreeを使って低い次数を使うように指定する:
BezierCurve[pts, SplineDegree -> 1]BezierCurve[pts, SplineDegree -> 9]BezierCurveに n 個の制御点があるとき,d < n-1を満たす次数 d を指定すると,複合ベジエ曲線が与えられる:
pts = Table[{i, 2(-1) ^ i}, {i, 7}];Region[BezierCurve[pts, SplineDegree -> #]]& /@ {2, 3, 4}SplineClosed (1)
pts = {{0, -(1/2)}, {(Sqrt[3]/2), -(1/2)}, {(Sqrt[3]/2), (1/2)}, {0, (1/2)}, {-(Sqrt[3]/2), (1/2)}, {-(Sqrt[3]/2), -(1/2)}};Graphics[{BezierCurve[pts]}]SplineClosedを使って曲線を閉じる:
Graphics[{BezierCurve[pts, SplineClosed -> True]}]これは,最初の制御点を配列の末尾に追加することと等価である:
Graphics[{BezierCurve[Append[pts, First[pts]]]}]アプリケーション (6)
フォント (4)
フォントは,通常,ベジエ曲線を使ってグリフの境界を定義する:
Graphics[BezierCurve[#]]& /@ {IconizedObject[«[image]»], IconizedObject[«[image]»], IconizedObject[«[image]»]}glyph = FilledCurve[BezierCurve[IconizedObject[«[image]»]]];Graphics[{EdgeForm[#], FaceForm[], glyph}]& /@ {Thick, Dashed, StandardRed}Graphics[{#, glyph}]& /@ {StandardBlue, LinearGradientFilling[{StandardRed, StandardYellow}], HatchFilling[0, 1, 3]}Graphics[{#, glyph}, PlotRangePadding -> Scaled[0.05]]& /@ {DropShadowing[], Haloing[StandardYellow, 0, 5], Blurring[]}RegionDilationを使って異なるフォント重みのシミュレーションを行う:
glyph = FilledCurve[Map[List, BezierCurve /@ {IconizedObject[«[image]»], IconizedObject[«[image]»], IconizedObject[«[image]»]}]];Table[Graphics[RegionDilation[glyph, t]], {t, {0, 2}}]Table[Graphics[{Haloing[ThemeColor["Foreground"], t], glyph}, PlotRangePadding -> Scaled[.1]], {t, {0, 5}}]ShearingTransformを使って異なるフォントの斜体のシミュレーションを行う:
glyph = FilledCurve[Map[List, BezierCurve /@ {IconizedObject[«[image]»], IconizedObject[«[image]»], IconizedObject[«[image]»]}]];Table[Graphics[GeometricTransformation[glyph, ShearingTransform[θ , {1, 0}, {0, 1}]]], {θ, {0, 20Degree}}]ベクターグラフィックス (2)
自由形式の経路で構成される形状をBezierCurveを使って描画する:
Graphics[{BezierCurve[IconizedObject[«[image]»]]}]FilledCurveを使って形状の内側にスタイル付けする:
Graphics[{LinearGradientFilling[{Hue[0.333, 0.8250000000000001, 0.639], Hue[0.169, 1, 0.9530000000000001]}, Top], EdgeForm[Thick], FilledCurve[BezierCurve[IconizedObject[«[image]»]]]}]curves = BezierCurve /@ {IconizedObject[«[image]»], IconizedObject[«[image]»], IconizedObject[«[image]»], IconizedObject[«[image]»], IconizedObject[«[image]»]};Graphics[curves]Graphics[{FilledCurve[List /@ curves], RGBColor[0.9058724017188509, 0.13725482819401516, 0., 1.], FilledCurve[curves[[1]]]}]特性と関係 (14)
次数1のBezierCurveはLineに等しい:
pts = {{0, -1}, {2, 1}, {4, -1}, {6, 1}};Graphics /@ {BezierCurve[pts, SplineDegree -> 1], Line[pts]}BezierCurveはBSplineCurveの特殊ケースである:
pts = {{-3, 0}, {6, 5}, {-6, -5}, {3, 0}};Graphics /@ {BezierCurve[pts], BSplineCurve[pts]}RegionConvertを使って同等のBSplineCurveを得る:
RegionConvert[BezierCurve[pts], "Spline"]BezierSurfaceは,制御点の矩形行列を取るBezierCurveの高次元形式である:
pts = (| | | | |
| ---------- | ----------- | ----------- | ----------- |
| {0, 0, 7} | {0, 3, 10} | {0, 7, 10} | {0, 10, 7} |
| {3, 0, 10} | {3, 3, 14} | {3, 7, 14} | {3, 10, 10} |
| {7, 0, 10} | {7, 3, 14} | {7, 7, 14} | {7, 10, 10} |
| {10, 0, 7} | {10, 3, 10} | {10, 7, 10} | {10, 10, 7} |);Graphics3D[BezierSurface[pts]]BezierSurfaceの境界辺は4本のベジエ曲線から形成される:
bc = Map[BezierCurve, {pts[[1]], pts[[-1]], pts[[All, 1]], pts[[All, -1]]}];Graphics3D[{BezierSurface[pts], Thick, StandardRed, bc}]BezierSurface上のすべての等パラメトリック曲線は有効なベジエ曲線である:
uc = Table[BezierCurve[Map[#[u]&, Map[BezierFunction, pts]]], {u, 0, 1, 1 / 5}];
vc = Table[BezierCurve[Map[#[v]&, Map[BezierFunction, Transpose[pts]]]], {v, 0, 1, 1 / 5}];Graphics3D[{BezierSurface[pts], Thick, RGBColor[0.14, 0.8, 0.14], uc, RGBColor[0.4, 0.6, 1], vc}]Circleは複合BezierCurveでほぼ近似できる:
Region /@ {BezierCurve[IconizedObject[«[image]»]], Circle[]}RegionHausdorffDistance@@%BezierCurveは,常に最初と最後の制御点を補間する:
pts = {{0, -1}, {1, 2}, {2, -2}, {3, 1}};Graphics[{BezierCurve[pts], Red, Point[{First[pts], Last[pts]}]}]pts = {{0, -1}, {2, 1}, {4, -1}, {6, 1}, {4, 2}};hull = ConvexHullMesh[pts, MeshCellStyle -> {0 -> Red, 2 -> Opacity[1 / 4]}];Show[hull, Region[BezierCurve[pts, SplineDegree -> 4]]]3Dでは,等面制御点を持つベジエ曲線は,その点と同一平面にある:
pts = {{-3, -1, 0}, {6, 10, 0}, {-6, -10, 0}, {3, 1, 0}};pts//CoplanarPointsGraphics3D[{InfinitePlane[Take[pts, 3]], BezierCurve[pts]}, Lighting -> "Accent", ViewPoint -> #]& /@ {2{1, -1, 1}, Front, Top}BezierFunctionは,特定のパラメータ値に対応するBezierCurve上の点を与える:
pts = {{-3, 0}, {6, 5}, {-6, -5}, {3, 0}};bfunc = BezierFunction[pts]positions = Table[bfunc[u], {u, 0, 1, 1 / 10}];Graphics[{BezierCurve[pts], StandardRed, PointSize[0.02], Point[positions]}]ベジエ曲線は,ベルンシュタイン多項式を用いてその制御点の重み付き和を取ることで構成できる:
pts = {{0, -1}, {1, 1}, {2, -1}, {3, 1}};bezier[t_] := Sum[BernsteinBasis[3, i, t] * pts[[i + 1]], {i, 0, 3}]GraphicsRow[{ParametricPlot[bezier[t], {t, 0, 1}, Frame -> True, Axes -> False], Graphics[BezierCurve[pts], Frame -> True]}, ImageSize -> 400]BernsteinBasisを使って曲線に沿った各制御点の重みを可視化する:
weights = Table[BernsteinBasis[3, i, t], {i, 0, 3}];Plot[weights, {t, 0, 1}, PlotLegends -> {"SubscriptBox[p, 1]", "SubscriptBox[p, 2]", "SubscriptBox[p, 3]", "SubscriptBox[p, 4]"}]pts = {{0, -1}, {2, 2}, {4, -2}, {6, 1}};A = AffineTransform[{{{1, 1}, {0, 2}}, {1, 2}}];{Graphics[GeometricTransformation[BezierCurve[pts], A], Frame -> True],
Graphics[BezierCurve[A[pts]], Frame -> True]}2本のベジエ曲線の制御点を平均することは,それらの曲線自体を平均することと等価である:
pts1 = {{0, -1}, {2, 1}, {4, 2}, {6, 2}};
pts2 = {{2, -1}, {3, 1}, {4, -1}, {6, 0}};Graphics[{Thick, RGBColor[0.4, 0.6, 1], BezierCurve[pts1], RGBColor[0.98, 0.56, 0.17], BezierCurve[pts2], RGBColor[0.93, 0.27, 0.27], BezierCurve[Mean[{pts1, pts2}]]}, Frame -> True]ParametricPlot[{BezierFunction[pts1][t], BezierFunction[pts2][t], Mean[{BezierFunction[pts1][t], BezierFunction[pts2][t]}]}, {t, 0, 1}, Frame -> True, Axes -> False, PlotStyle -> {RGBColor[0.4, 0.6, 1], RGBColor[0.98, 0.56, 0.17], RGBColor[0.93, 0.27, 0.27]}]複合ベジエ曲線は,2つのセグメントが接合する点において滑らかでない場合がある:
pts = {{0, 0}, {1, -1}, {3, -1}, {3, 0}, {4, 1}, {5, 1}, {6, 0}};Graphics[{BezierCurve[pts], Dashed, Gray, Line[pts], Red, Point[pts]}]境界に隣接する点を共線となるように設定し,複合ベジエ曲線を保証する:
pts[[5, 1]] = 3;Graphics[{BezierCurve[pts], Dashed, Gray, Line[pts], Red, Point[pts]}]ベジエ曲線は,任意のより高い次数の等価な曲線へと次数を上げることができる:
pts = {{0, 0}, {2, 3}, {4, 0}};elevate[pts_] := With[...]epts = Table[Nest[elevate, pts, d], {d, 0, 3}];Graphics /@ Table[{BezierCurve[epts[[i]], SplineDegree -> i + 2], Dashed, Gray, Line[epts[[i]]], Red, Point[epts[[i]]]}, {i, Length[epts]}]SubdivisionRegionは,制御点ではなく制御メッシュから滑らかな曲面を生成する:
Region /@ {SubdivisionRegion[[image]], BezierCurve[IconizedObject[«[image]»]]}インタラクティブな例題 (2)
Column[{Manipulate[DynamicModule[{},
$curve = BezierCurve[pts, SplineDegree -> d, SplineClosed -> c];
Graphics[{$curve, Dashed, Opacity[0.5], Line[pts]}, PlotRange -> 5, Frame -> True, ImageSize -> 250]], {{pts, {{-4, -4}, {-3, 4}, {3, -4}, {4, 4}}}, Locator, LocatorAutoCreate -> True}, {{d, 3, "degree"}, 2, 6, 1}, {{c, False, "closed"}, {False, True}}], Button["Copy Curve to Clipboard", CopyToClipboard[$curve]]}]interpolateCurves[pts1_, pts2_] :=
Manipulate[Graphics[{BezierCurve[pts1(1 - t) + pts2 t], Opacity[0.25], Dashed, BezierCurve[pts1], BezierCurve[pts2]}], {t, 0, 1}]interpolateCurves[{...}, {...}]interpolateCurves@@{{...}, {...}}関連するガイド
-
▪
- スプライン ▪
- グラフィックスオブジェクト
テキスト
Wolfram Research (2008), BezierCurve, Wolfram言語関数, https://reference.wolfram.com/language/ref/BezierCurve.html.
CMS
Wolfram Language. 2008. "BezierCurve." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/BezierCurve.html.
APA
Wolfram Language. (2008). BezierCurve. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/BezierCurve.html
BibTeX
@misc{reference.wolfram_2026_beziercurve, author="Wolfram Research", title="{BezierCurve}", year="2008", howpublished="\url{https://reference.wolfram.com/language/ref/BezierCurve.html}", note=[Accessed: 13-August-2026]}
BibLaTeX
@online{reference.wolfram_2026_beziercurve, organization={Wolfram Research}, title={BezierCurve}, year={2008}, url={https://reference.wolfram.com/language/ref/BezierCurve.html}, note=[Accessed: 13-August-2026]}