みたにっき@はてな

三谷純のブログ

Illustrator では円を正確に表現できないわけ

Illustrator などで使われる3次ベジェ曲線では、正確な円を描くことができない(微小な誤差がある)ということは、わりと知られているような気がするのだけど、

それは、なぜ?

ということをしっかり説明したページは見かけない(あるかもしれないです)ので、確認の方法を書いてみたいと思います。

 

まず、3次のベジェ曲線は、パラメータ 0 \leq t \leq 1 の3次の多項式で次のような形で表現することができます。

x(t)=a_3 t^3 + a_2 t^2 + a_1 t + a_0

y(t)=b_3 t^3 + b_2 t^2 + b_1 t + b_0

ただし、a_3 \neq 0, b_3 \neq 0 です。

 

さて、このような式が一般性を失うことなく、原点を中心とする半径1の円を表せる仮定すると、

x(t)^2 + y(t)^2 - 1= 0

となります。

 

つまり、

 (a_3 t^3 + a_2 t^2 + a_1 t + a_0) ^2 + (b_3 t^3 + b_2 t^2 + b_1 t + b_0)^2-1=0

であり、これを展開すると

 (a_3^2 + b_3^2)t^6 + \square t^5 + \square t^4 +\square t^3 +\square t^2 + \square t + a_0^2 + b_0^2 - 1=0

となります(t^5からtの係数は\square記号で省略しました)。

これが恒等式となるためには、すべての係数が0でなくてはいけないので、t^6の係数に注目すると

 a_3^2 + b_3^2=0

であるため、a_3=0, b_3=0となります。

これは冒頭でa_3 \neq 0, b_3 \neq 0 と言っていたことと矛盾します。

 

以上で、3次ベジェ曲線では、円を表現できないことを示せました。

(次数に依らず、n次ベジェ曲線では円を表現できないことを、同じようにして示すことができます。)