パスの回転方向の求め方

CorelDRAW(.)


パスの回転方向の求め方は、Corelフォーラムのメーリングリストで、面積から求める方法を教えて頂きました。それは、面積を求めるアルゴリズムで、右回りの図形と左回りの図形では解が正と不に分かれることを利用したもので、非常にシンプルで美しいものでした。

パスの回転方向は、普通なら唯一の答えがあるもので検討の余地はないのですが、8の字のようなねじれた形状の場合、話が違ってきます。

そもそも8の字の様にねじれた形のパスに回転方向という概念が当てはまるのか疑問ですが、実際に8の字があった場合、これを右回りと考えるべきか、左回りと考えるべきか、判断する必要は出てきます。そしてその判断方法によって、答えが違ってきます。

筆跡の輪郭として作ったパスの場合

筆跡の開始点から終了点までを一つの輪で囲ったようなこの8の字は、交差こそすれ、実はねじれていません。

なので、答えは一つで判断方法を検討する余地はありません。

形状の輪郭として作ったパスの場合

この8の字は、右回りのパスの内側を、左回りのパスで穴を2つ開けて8の字に見せています。

パスの回転方向は重要になりますが、やはり答えは一つで判断方法を検討する余地はありません。

線の輪郭として作ったパスの場合

←面積法と、←頂点法

8の字形の線の輪郭として形作られたこの8の字は、8の字にねじれた2つのパスから構成されています。

上の図はパスの回転方向を色で示していて、右も左も同じ図形ですが、回転方向の求め方によって答えが変わっています。

左の図は面積から求めたもので、これは言い換えれば、右回りの面積と左回りの面積のどちらが大きいかということになります。

右の図はまず一番左上の頂点を調べて、その次の点が反対側の点と比べて右上方向にあるかどうかで判断しています。

面積で求める方法は、一般的な図形では良い答えを出してくれるものと思いますが、このような図形の場合、外側と内側と(どちらが外側でどちらが内側なのかも曖昧なのですが)で回転の向きが逆で穴を開けていることが分かりやすいという意味では、頂点からの方向で求める方法の方がよい答えを出してくれるようです。

頂点からの方向で求める方法の振る舞い

面積でパスの方向を求める場合、同じ形状のパスならどのような角度でも同じ答えが得られますが、頂点からの方向でパスの回転方向を求める場合、角度によって答えが違ってきます。

上の例では、右から2つ目で右回りと左回りが逆転しています。さらに、答えが変わる前後の微妙なところでは両方が右回りになったりということも起き得ます。しかし、ねじれたパスによって描かれる文字というのは8の字と∞の字しか思い浮かばなかったので、この2つがいい感じに判断できれば良いとしました。また、当初は8の字しか思い浮かばなかったので、頂点を一番上の点と考えるようにしていたのですが、∞の字があることに気が付き一番左上を頂点とするようにしたという経緯があるくらい曖昧さのある求め方だということを付け加えておきます。

たかなし <colombai(domain:pluto.dti.ne.jp)>