So-net無料ブログ作成
検索選択

ベジエ曲線について [PostScript]

PS BASIC

3次ベジエ曲線は始点、始点の制御点、終点の制御点、終点の4つの点で定義されます。
Adobe Illustratorなら制御点がビジュアルに操作できるので簡単ですが、手書きプログラムでは制御点をどこに置けば、求める曲線が得られるのかは難しいのでトライアンドエラーで置いていくしかありません。

【サンプルコード】
ベジエ01.png %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:ベジエ曲線 % 参考の赤い線・文字等は省略 /a { -100 0 } def % 開始点 /b { -100 100 } def % 制御点 /c { 100 100 } def % 制御点 /d { 100 0 } def % 終了点 /DeviceRGB setcolorspace % 色空間設定 0 0 0 setcolor % 黒 0 0 240 240 rectstroke % 黒枠で囲む 120 120 translate % 座標の原点を中央に移動 newpath % パスの初期化 2 setlinewidth % 線幅2ポイント a moveto % 始点をaに置く b c d curveto stroke % ベジエ曲線を描く
% ベジエ曲線2 /a { -100 0 } def % 開始点 (x0,y0) /b {0 30 100 } def % 制御点 (x1,y1) /c { 80 80 } def % 制御点 (x2,y2) /d { 100 0 } def % 終了点 (x2,y2) ベジエ02.png
% ベジエ曲線3 /a { -100 0 } def % 開始点 (x0,y0) /b {0 30 100 } def % 制御点 (x1,y1) /c { 80 80 } def % 制御点 (x2,y2) /d { 100 0 } def % 終了点 (x2,y2) ベジエ03.png

% ベジエ曲線4 /a { -50 0 } def % 開始点 /b { 70 100 } def % 制御点 /c { -70 100 } def % 制御点 /d { 50 0 } def % 終了点 ベジエ04.png

Adobe Illustratorの円もベジエ曲線の近似円です。 Illustratorで制御点を測ったら0.5525あたりまでは分かったのですが、正確ではないため 円の制御点の近似値については下記のサイトを参考にしました。 A Primer on Bézier Curves https://pomax.github.io/bezierinfo/ja-JP/ ベジエ05.png %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 240 240 %%Title:ベジエ曲線で円を描く /s 0.55228 def % 円の制御点の近似値 /r 100 def % 円の半径 /ctp { r s mul } def % 制御点の長さ 半径× 近似点値 /a { r neg 0 } def % 開始点 /b { r neg ctp} def % 制御点 /c { ctp neg r } def % 制御点 /d { 0 r } def % 終了点 /e { ctp r } def /f { r ctp } def /g { r 0 } def /h { r ctp neg } def /i { ctp r neg } def /j { 0 r neg } def /k { ctp neg r neg } def /l { r neg ctp neg } def /DeviceRGB setcolorspace % 色空間設定 0 0 0 setcolor % 黒 0 0 240 240 rectstroke % 黒枠で囲む 120 120 translate % 座標の原点を中央に移動 newpath % パスの初期化 2 setlinewidth 線幅2ポイント a moveto % 始点をaに置く b c d curveto % 左上の円弧(1/4円) e f g curveto % 右上の円弧 h i j curveto % 右下の円弧 k l a curveto % 左下の円弧 closepath% 線を繋ぐ stroke % ベジエ曲線を描く




【オペレータの説明】
x1 y1 x2 y2 x3 y3 curveto
絶対座標でベジエ3次曲線を描く。 四角形の線分の長さ(サンプルの赤線)は各端点におけるパスのベロシティを表しています。
ベロシティとは方向性を持った強弱の度合いです。
dx1 dy1 dx2 dy2 dx3 dy3 rcurveto
相対座標でベジエ3次曲線を描く。relative curvetoの略。

タグ:PostScript
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました