この記事の完全なサンプルコードは、Patreonからダウンロードできます。
Coffee Supplier on Patreon

1. バックミンスター・フラー

バックミンスター・フラー(1895–1983)は、アメリカ合衆国の建築家、発明家、思想家であり、構造デザイナーでもありました。彼の基本思想は「最小資源で最大効果 – Do more with less」を追求することにあり、構造物を力の流れとして捉える独自の視点を持っていました。この思想に基づき生まれたのが、ジオデシック・ドームです。単なる建築形態ではなく、効率的な力の分散と軽量性を兼ね備えた構造として設計されました。

wikipedia / Buckminster_Fuller

2. ジオデシック・ドーム(スフィア)の基本概念

「Geodesic」とは「測地線」を意味し、ジオデシック・ドームでは球面上の最短距離線を基準に三角形パネルを配置します。三角形を用いる理由は、構造的安定性が高く変形しにくい点にあります。三角形を基礎にすることで、少ない部材で大きなドームを構築でき、軽量化と安定性を同時に実現しています。

3. 数学的基礎|正多面体と球の近似

ジオデシック・ドームの多くは、正多面体の中でも正二十面体を基礎に作られています。正二十面体はすべての面が三角形で構成され、球への近似効率が非常に高いためです。また、頂点には黄金比が関係しており、この比率が幾何学的な美しさと構造安定性に寄与しています。

しかし、正二十面体はそのままでは球にはなりません。ジオデシック・ドームは、近似としての球面を作るために三角形を細分化します。ここで重要なのは、数学的に完全な球を再現することよりも、部材効率や構造の合理性を優先する設計である点にあります。

4. 面数を変えるという操作|Frequency(V数)

4.1 V数とは何か

V数とは、各三角形を何段階で細分化するかを示す指標です。1Vは分割なし、2Vは三角形1枚を4枚に分割、3Vは16枚に分割されるように再帰的に増加します。V数を変えることで、ドームの細かさと球への近似度を調整できます。

V数三角形分割面数(概算)特徴
1V分割なし20正二十面体そのもの、粗い、球体感は低い
2V各三角形を4分割80球への近似がわずかに向上
3V各三角形を16分割320一般的な小型ドームで多用
4V64分割1280球にかなり近くなる、中〜大型ドーム
5V256分割5120高精度、大型展示ドーム向き
6V1024分割20480極めて滑らか、計算・施工負荷大

4.2 面数を増やす・減らすとはどういうことか

  • 面数を増やす(V数を上げる)と、球体に近い形状になり、美しさと滑らかさが増します。
  • 面数を減らす(V数を下げる)と、球に近似する精度は下がりますが、多面体的な表情が強くなります。

ただし、V数は整数で設定する離散的な値であり、連続的に自由に増減できるわけではありません

V数を上げても、すべての部材長が完全に同一にはならないことがあります。これは、球面射影の過程で生じる数学的制約によるものであり、フラーはこの不均一さを力の分散効率に有効活用できる設計の特徴として捉えていました。

5. コンピュータによる生成|Processingでの実装

コンピュータ上でジオデシック・ドームを生成することで、構造理解を視覚的に確認できます。また、V数を変えると形状がどのように変化するかを即座に試すことができ、設計原理の学習やアート表現にも活用可能です。

Processingでの基本実装は次の流れです:

  1. 正二十面体の頂点と面を定義
  2. 各三角形を再帰的に分割(V数に応じて)
  3. 分割後の頂点を球面上に正規化(normalize)
  4. 三角形メッシュとして描画

1. 正二十面体の頂点と面を定義する

まず、ジオデシック・ドームの基礎となる 正二十面体(Icosahedron) を定義します。


ArrayList vertices = new ArrayList();
ArrayList faces = new ArrayList();

void createIcosahedron() {
  float t = (1 + sqrt(5)) / 2; // Golden ratio

  // Define vertices of the icosahedron
  vertices.add(new PVector(-1,  t,  0));
  vertices.add(new PVector( 1,  t,  0));
  vertices.add(new PVector(-1, -t,  0));
  vertices.add(new PVector( 1, -t,  0));

  vertices.add(new PVector( 0, -1,  t));
  vertices.add(new PVector( 0,  1,  t));
  vertices.add(new PVector( 0, -1, -t));
  vertices.add(new PVector( 0,  1, -t));

  vertices.add(new PVector( t,  0, -1));
  vertices.add(new PVector( t,  0,  1));
  vertices.add(new PVector(-t,  0, -1));
  vertices.add(new PVector(-t,  0,  1));

  // Define triangular faces using vertex indices
  faces.add(new int[]{0,11,5});
  faces.add(new int[]{0,5,1});
  faces.add(new int[]{0,1,7});
  faces.add(new int[]{0,7,10});
  faces.add(new int[]{0,10,11});
  // Remaining faces omitted for brevity
}
  • 頂点は黄金比を含む座標で定義
  • 面は「頂点インデックスの組」として管理

2. 各三角形を再帰的に分割する(V数)

V数に応じて、1枚の三角形を 4枚に分割していく再帰処理です。


ArrayList subdividedFaces = new ArrayList();

void subdivideTriangle(PVector a, PVector b, PVector c, int depth) {
  if (depth == 1) {
    subdividedFaces.add(new PVector[]{a, b, c});
    return;
  }

  PVector ab = PVector.add(a, b).mult(0.5);
  PVector bc = PVector.add(b, c).mult(0.5);
  PVector ca = PVector.add(c, a).mult(0.5);

  subdivideTriangle(a, ab, ca, depth - 1);
  subdivideTriangle(b, bc, ab, depth - 1);
  subdivideTriangle(c, ca, bc, depth - 1);
  subdivideTriangle(ab, bc, ca, depth - 1);
}

  • V数 = 再帰の深さ
  • 1つの三角形 → 4つの小三角形
  • 面数は指数的に増加

3. 分割後の頂点を球面上に正規化する(normalize)

分割で生まれた頂点は平面上にあるため、球面へ射影します。


PVector normalizeToSphere(PVector v, float radius) {
  v.normalize();
  v.mult(radius);
  return v;
}

分割処理の中で、以下のように使用します。


ab = normalizeToSphere(ab, R);
bc = normalizeToSphere(bc, R);
ca = normalizeToSphere(ca, R);
  • normalize() により単位ベクトル化
  • 半径 R を掛けて球面上へ配置
  • 「完全な球」ではなく「合理的な近似」

4. 三角形メッシュとして描画する

最終的に得られた三角形群を描画します。


void drawMesh() {
  stroke(255);
  noFill();

  for (PVector[] tri : subdividedFaces) {
    beginShape();
    vertex(tri[0].x, tri[0].y, tri[0].z);
    vertex(tri[1].x, tri[1].y, tri[1].z);
    vertex(tri[2].x, tri[2].y, tri[2].z);
    endShape(CLOSE);
  }
}
  • すべての面は三角形
  • ワイヤーフレーム表示は構造理解に有効

この手順を理解することで、数学的原理とプログラム上のアルゴリズムの対応関係を学ぶことができます。

6. ジオデシックによる図形をどう捉えるか

ジオデシック・ドームは単なる建築形態ではなく、数学・構造・思想・アルゴリズムが交差する存在です。Processingなどのプログラミング環境で可視化することで、フラーの考え方を現代的に体験でき、デザインやアート制作にも応用可能です。面数やV数を調整することで、球体への近似精度や表現の印象を自在に変えられることも重要な特徴です。

  • 建築物として:軽量かつ安定したドーム構造
  • 数学構造として:正二十面体の分割と球面射影
  • ジェネラティブフォームとして:Processingや他のCGで再現可能
  • アート・音・データとの接続:形状を可視化・音響やインタラクションに応用

7. 作品例|Geodesic Sphere: Subdivision 1

Geodesic Sphere: Subdivision 1
Sound Visualization, Sound on.
Sound: Dry ice / BGD_SOUNDS (ICEFric_Dryice, Glass Tea Pot, Stress, Squeak, Clink_BGDS_ AKG C411 PP, 192-32)

Recommended Book / barbe_generative_library

Grid-Systems-Raster-Systeme

Grid systems in graphic design – Josef Müller-Brockmann

グリッドシステムとは。

グリッドシステムとは、連続した行と列に基づいてテキストやイメージを配置しデザインの整合性と視認性を高めるレイアウト手法です。元々は印刷レイアウトのために考えられたものですが、現在ではWebデザインなど、あらゆるデザイン設計において利用され、ProcessingやP5jsなど2Dでグラフィックを制作する場合にも、このグリッドシステムから学べる事は多い。

ーーーーー
► 『Grid systems in graphic design 』(Josef Müller-Brockmann

1981年に刊行された完全日本語訳版。
初版/ 2019.11.9
ページ数/184ページ
出版社/ボーンデジタル
言語/日本語

BGD_SOUNDS on bandcamp

BGD_SOUNDSでは、アートワークで使用するために録音された様々な音を公開しています。

Link / BGD_SOUNDS on bandcamp

安価で利用できる膨大な著作権フリーのサウンドライブラリーを目指し、定期的に音源ライブラリーを増やしています。音源のほとんどは、192kHzの32bitにて録音。音楽制作や映像制作など、それぞれの用途に合わせて利用できます。(メタデータも含まれています。)

BGD_CLUB(月額サブスクリプション)では、低価格からすべてのライブラリーにアクセスし自由にダウンロードすることが可能です。