多面体を平面に展開することは、特に難しいことではありません。それぞれの面が平面で構成されているため、極端な例では、下図の右のように、全ての面をバラバラに平面上に配置し、それを後で組み上げることで、元の形をペーパークラフトとして再現することができます。
正十二面体の展開図
ただし、一般的にペーパークラフトでは「切断と貼り合せ」よりも「折り曲げ」の方が作業が楽なので、「できるだけパーツ数が少ない展開図にする」ということが1つの目標になります。上の図の場合、一続きのパーツに展開されている左の方がペーパークラフトに適した展開図だと言えるでしょう。(折り曲げよりも切断の方が楽な、例えばプラスチックなどで形を作る場合には、これとは逆で、全ての面をバラバラにした方が効率が良くなります。)
多面体をコンピューターで展開する場合、3次元空間での面と面の接続をなるべく維持しながら平面へ配置することを行います。具体的なアルゴリズムの例として、下図のフローチャートに示す処理によって展開図を生成することができます。
展開アルゴリズム
別のアルゴリズムでも展開図を生成できるでしょうが、この例では互いに隣接する面を巡回しながら面を1つずつ展開してゆくという、最もオーソドックスな方法を取っています。 展開の処理の中では、新しく展開する面と既に展開されている面が互いに干渉しないかチェックする必要が発生しますが、このアルゴリズムでは、一度チェックした面に対してフラグを立てることで、同じ干渉判定を複数回行わないで済むような工夫をしています。多面体の形状によっては、一続きのパーツに展開できない場合があるので、その場合は複数のパーツに展開されることになります。
1つの立方体の展開図を作る場合でも、その作り方は幾通りもあるように、1つの多面体には、複数の展開図のパターンが存在します。
例えば、球の形をした同じ多面体の展開図でも、下図のように異なるパターンが存在します。これを実際にペーパークラフトとして組み立てることを考えた場合、展開図のパターンによって工作の手間が大きく異なることが推測されます。
球の展開図
そのため、展開図を作成する場合には、なるべく「作りやすい展開図」を生成することがポイントとなります。
ところで、1つの多面体には何通りの展開図が存在するでしょう。与えられた多面体に、何通りの展開図が存在するか数え上げる手法は確立されていませんが、1つの辺は「繋がっている状態」と「切り離されている状態」を取りうるので、ざっと2(辺の数)通りに近いくらいのパターンが存在すると推測されます。この数は、辺の数が少し増えただけで爆発的に増加してしまうため、最新のスーパーコンピューターでも全ての展開図のパターンを作り出すのは困難です。
従って、工作しやすい展開図を得るために、「全部の展開図を作って、その中から『よい展開図』を探し出す」というアプローチは使えません。そのため、「なんとなく『よい展開図』になりそうな方法で展開図を作る」というアプローチが現実的な対応ということになります。
ところで、前節で述べたアルゴリズムでは、フローチャートの図の中に(a)(b)で示した「最初の面の選択方法」と「次に展開する面の選択方法」において選択の自由度が存在します。ここでの面の選択の方法によって、結果として得られる展開図に違いが出てきます。従って、「なんとなく『よい展開図』になりそうな方法」というのは、この(a)(b)における面の選択において、「なんとなく『よい展開図』になりそうな面を選択する方法」に他なりません。この方法としては、隣接する面との間に存在するエッジの長さ、角度などを考慮することが現実的な対応となります。これについての考察は文献(*1,*2)にまとめられています。
商用ソフトである「ペパクラデザイナー」での、展開図作成アルゴリズムも、この「面の選択方法」を切り替えているに他なりません。しかし、これによって、人間の感性で判断される「よい展開図」が必ずしも生成されるとは限らないため、展開図の生成方法についてはまだまだ研究の余地が残されています。