チャーノフの顔グラフ2

作成日:2003-09-23
最終更新日:

前回の「チャーノフの顔グラフ」では SVG では楕円の弧を表現する手段がないものとして、 ベジエ曲線を利用して曲線を描いてみた。 ところがきちんと調べてみたら、楕円の弧を表現する手段があった。 次の通りである。

A rx,ry x-axis-rotation large-arc-flag,sweep-flag x,y

A は絶対座標を用いて弧を描くことを表す。 rx, ryは楕円のx軸,y軸の径、x-axis-rotation は楕円の軸のx軸からの傾き、 large-arc-flag,sweep-flag はそれぞれ弧に関するパラメータである。 large-arc-flagが1であれば長い弧が、0であれば短い弧が選ばれる。 sweep-flag が1であれば、角度θをパラメータとして正の方向へ弧が描かれる。 sweep-flag が0であれば、角度θをパラメータとして負の方向へ弧が描かれる。 x,yは終点である。

ベジエ曲線に比べて、パラメータが多い。しかし、これは正確に曲線を表すためには必要なことだ。

チャーノフの顔グラフです。

注意すべき点が2つある。 第1は表現方法の相違である。 チャーノフの顔グラフにおける顔の外形は一般に、 顔の横位置と頭頂(または顎)の座標と離心率で与えられるのに対し、 上述した通り SVG では、顔の横位置、頭頂の他に楕円の長半径、短半径が必要となる点である。 変換のためには、長半径、短半径と楕円の中心の位置の3つを未知の変数とした方程式をとけばよい。 このとき、楕円のx 軸方向の半径を a 、y 軸方向の半径を b とすると、b >= aであるので(証明略)、 離心率 e との間に a = b * sqrt(1 - e^2) の関係があることを利用する (sqrt()は平方根)。 なお、x-axis-rotation は 0 でよい。

次のページでは、<顔グラフ>を描くためのパラメータを数学的に考察する。

まりんきょ学問所>> マーク付け言語手習いの部屋>> チャーノフの顔グラフ2


MARUYAMA Satosi