ベジェ曲線で円を描いてみた

11:ベジェ曲線で円を描けるか

ベジェ曲線で、円を描けるだろうか。

 

ためしにペイントで描いてみた。180度まではきれいに描けた。

ベジェ曲線で円を描いてみた

青と赤と細い緑の線がベジェ曲線で、それぞれ90, 180, 270度の円弧を描こうとしたものである。
270度の線はゆがんでしまい、描けなかった。

 

どのあたりに制御点を置けばいいのかというと、下図のとおりである。
直線らしいゆがんだ線の頂点が、制御点である。

中間にある2つの制御点は、どちらも、始点と終点から、接線の方向に向かってずらした位置にある。

そのずらす長さを考えてみた。

単位円上で、適当な角度の円弧をベジェ曲線で描く。
始点と終点は分かる。

t=0.5において通りたい点 M は、角度が1/2の地点なので、
B(0.5)=0.125P0+0.375P1+0.375P2+0.125P3 = M となる。

これを変形すると、P1 と P2 の中点、(P2+P1) / 2 = O が求まる。

Oを求める

そして、P0とP3の中点と、Oの間の長さを求め、l を求める。

l = ( |O| – cos(θ/2) ) / sin(θ/2)

となるので、始点と終点からそれぞれ、接線の方向に移動した場所を P1, P2 とする。

#手書き汚い

 

 

これを基に表計算に入力して、各地点から原点への長さをグラフにすると以下の様になった。

始点と中点と終点を確実に通るようにしたので、1/4 地点と 3/4 地点で誤差が最大になり、誤差が大きい場合、膨らんだ形になる。

 

角度ごとの最大誤差での原点への距離を計算した。

45 1.0000040
50 1.0000076
55 1.0000134
60 1.0000227
65 1.0000366
70 1.0000572
75 1.0000865
80 1.0001275
85 1.0001835
90 1.0002587
95 1.0003581
100 1.0004876
105 1.0006541
110 1.0008658
115 1.0011321
120 1.0014638
125 1.0018735
130 1.0023755
135 1.0029862
140 1.0037243
145 1.0046108
150 1.0056696
155 1.0069278
160 1.0084160
165 1.0101685
170 1.0122243
175 1.0146271
180 1.0174262
185 1.0206776
190 1.0244441
195 1.0287971
200 1.0338173
205 1.0395965
210 1.0462393
215 1.0538651
220 1.0626108
225 1.0726340

 

グラフにした

 

180度ぐらいから一気に誤差が増える。
180度でも2%近い誤差なので、90度ぐらいで分割するほうが無難だろう。

 

.xls ファイル

広告

11:ベジェ曲線で円を描けるか」への1件のフィードバック

  1. 下の如き 曲線 C2 を 深く考察された(例えば 曲率 その縮閉線等)経験がお在りでしょうか?
    C2は円C1に「近い」と云えます…

    學生さん 向けに;
         (x,y)∈[0,Pi]×[0,Pi]とし, 2つの 曲線 
    C1;(x – Pi/2)^2 + (y – Pi/2)^2 = (Pi/(3*Sqrt[2]))^2,
    C2; Sin[x] + Sin[y] == Sqrt[3] を考察する。
    (1)共通点を求めよ。
    (2)2曲線で囲まれる部分の面積を求めよ。(狭間の面積で遠近定義..)

    (3)C2 と x+y=k が 接するkと 接点の座標と 接線 を求めよ。
    (4)(3,1)を中心とする円が C2 に 接する半径 r と 接点の座標と 接線 を求めよ

     
     

    いいね

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中