お絵描きソフトInkscape(インクスケープ)の使い方を初級レベルから上級レベルまで広く紹介しています。
情報追加のリクエストや分かりにくい点があれば下のCONTACTフォームからどうぞ。

Inkscapeで2つの円の両方に接する線を描く

 このページでは、Inkscapeを使って任意の位置と大きさの2つの円の両方に接する線(2つの円に共通の接線)を描く方法を考えてみたいと思います。

 これがもし簡単に描けると、いろんな応用ができそうに思うのですが、ネットで検索してもいい感じの手順を紹介してくれているコンテンツを発見できませんでした。

 しょうがないので、頭の体操のつもりで自分で考えてみました。

 ちなみにInkscapeのスナップ機能には接線になる位置にスナップさせるオプションも提供されていますが、このオプションはパスの一方の端のノードを移動したときに接線になる位置にスナップするというもので、その結果としてもう一方の端のノードは接線ではなくなってしまうので「モグラたたき状態(あちらを立てればこちらが立たない状態)」になってしまい、2つの円に同時に接する線にするのは意外に難しいと思いました。

 でもここで考えた手順はとても面倒なものなので、もっとシンプルな手順がありそうな気もします。あるなら知りたいものです。

 さて、次のように位置や大きさがバラバラな円オブジェクトが2つあるとします。この円に同時に接するまっすぐな線を描いてみます。

 まず、次のようにスナップダイアログを設定します。いろんな種類のスナップを利用するので手当たり次第にスナップさせるようになっています。

 そしてまず小さいほうの円の中心から上に垂直に半径と同じ長さのパスを描きます。ペンツールで中心をクリックし、Ctrlキーを押しながら真上にドラッグしていき、円周に対してスナップさせれば簡単に描けます。

 この線を複製して、大きいほうの円の円周にくっつけます。そのためにはまずこの線の下の端を大きい円の中心にスナップさせ(次の図の左側)、そのあとCtrlキーを押しながら上に向かって円周にくっつくまでドラッグします(次の図の右側)。Ctrlキーを押しているので真上にドラッグできます。

 次に大きい円の内側に小さい円の半径の分だけ小さい円を追加します。そのためには、適当な大きさで円を描いてその回転中心を大きい円の中心にスナップさせ(同心円状にして)、さきほどの線の下の端にガイドラインを引き、Ctrlキー+シフトキーを押しながら円を拡大/縮小していって、そのガイドラインにスナップさせます(次の図の右側)。Ctrlキー+シフトキーを押しながら拡縮すると回転中心を動かさず、かつ相似形を維持しながら拡縮されます。

 次に小さい円の中心から内側の円に接する線を描きます。これはスナップダイアログで接線へのスナップをオンにすれば簡単です。

 あとはこの接線を平行移動して、最初の2つの円の両方に接する位置に持っていけばいいのですが、スナップダイアログで接線へのスナップをオンにしていてもうまくいかないんですね。

 しょうがないので、平行移動する先の接点を自分で作ってみました。まず大きい円の回転中心から内側の円の接点まで線を引きます。

 そしてこの線をノードツールを使って大きいほうの円に交わるところまで延長します。延ばしたいほうのノードをCtrlキー+Altキーを押しながらドラッグすればまっすぐ延長されます。

 そしてこの延長した線と大きいほうの円との交点の位置までさきほどの接線を移動すれば、大きい円と小さい円の両方に接する線になるというわけです。

 余計な線を削除すれば完成です。

 というわけでかなり面倒な手順を踏んで接線を描くことができたように思いますが、本当にこれで正しい接線になっているんだろうか?とか、他にもっとシンプルな手順が実はあるんじゃないか?とかいろいろ疑問が残ります。

 なお、スナップ機能だけを使って少しのズレは無視して接線を描くシンプルな手順も試してみました。(→「2つの円の両方に接する線を描く(簡易版)」)