ねこでじ(Nekodigi)

Nekodigi’s diary

学習中の気づきをまとめています。応援よろしくお願いします

【Processing】Apollonius Graphを実装する。

成果物

f:id:Nekodigi:20200717171141p:plain
f:id:Nekodigi:20200717172932p:plain
AW Voronoi(Additively Weighted Voronoi)という、曲線的でリアルなVoronoi図を作るのにApollonius Graphというものが必要そうだったので、実装してみました。計算負荷を考えて、三角関数縛りにしています。

仕組み

簡単に言うと、円の表面からの距離が等しい線を繋いでいったものです。今回は、三角形を使って計算しています。三辺の長さと二つの円の中心を繋いだ底辺は分かっているので、余弦定理で角度を求めると、残りの頂点の位置がわかります。
参考にしたサイト
CGAL 5.0.2 - 2D Apollonius Graphs (Delaunay Graphs of Disks): User Manual
Weighted Voronoi diagram calculator
ただし、底辺が傾いているときは、uvマッピングのように座標系を変換しています。詳しくはコードをご覧ください。

コード

Apollonius Graphという名前で追加しています。
GitHub - Nekodigi/Math: Time estimate and more