アンチグラビティ・クロウ(Antigravity Claw)

Tool

概要

Antigravity Clawは「任意のウェブページを重力に逆らわせる」ことを目指した実験的ツールです。指定したURLをフェッチしてDOM要素の情報(位置・サイズなど)を抽出し、それらを2Dの物理オブジェクトとして扱います。物理演算はRustで実装されたエンジン(Verlet積分とAABBによる衝突検出)で行われ、結果はブラウザで再生できるインタラクティブなHTMLアニメーションとして出力されます。元ネタはGoogle GravityやPythonのimport antigravityなどの“遊び”的発想で、ウェブページを視覚的に破壊・再構築するデモを手早く作るためのツールです。

GitHub

リポジトリの統計情報

  • スター数: 26
  • フォーク数: 0
  • ウォッチャー数: 26
  • コミット数: 2
  • ファイル数: 20
  • メインの言語: Rust

主な特徴

  • 任意のURLからDOMを取得・解析して物理オブジェクトにマッピング
  • Rustで実装された2D物理エンジン(Verlet積分)による挙動
  • AABB(Axis-Aligned Bounding Box)を用いた衝突検出で軽量な当たり判定
  • ブラウザで開けるインタラクティブなHTMLアニメーションを生成

技術的なポイント

Antigravity Clawの核は「DOM→物理ボディ→HTMLレンダリング」のパイプラインです。まず指定したURLをフェッチしてDOMのレイアウト情報(要素の境界ボックスやスタイル)を抽出します。各要素は矩形(AABB)として物理ワールドに登録され、その中心や角を基に簡易的な物理表現が作られます。物理解法にはVerlet積分を採用しており、Verletは位置ベースの手法で運動方程式を速度を明示的に扱わずに近似でき、拘束条件(ピンや距離制約)の実装が直感的で安定しやすい点が利点です。

衝突処理にはAABBを使うことで計算負荷を抑え、軸に平行な矩形同士の重なり計算で高速に衝突判定と分離を行います。精密な凸多角形や回転を扱う実装ほど複雑ではありませんが、ウェブページの矩形要素を扱う用途には十分です。レンダリング面では、物理結果をHTML/CSS(おそらく絶対配置やtransform)や軽量なJavaScriptで再生する設計が想定されます。マウスやタッチによるインタラクション(つかむ・引っ張る)を受け付けることで、ユーザーが要素に力を伝えるインタラクティブ性を持たせられます。

Rustを選んでいる点は、演算性能と型安全性、パッケージ管理(Cargo)を得られるメリットがあります。出力形式は「ブラウザで開けるHTML」と明記されており、サーバー側で物理を実行して静的アセットを生成する方法、またはクライアント側でRust→WebAssemblyにコンパイルして実行する方法のいずれか、あるいは両方のハイブリッドが考えられます。本リポジトリは実験的であり、シンプルな衝突モデルとVerletベースの安定性を活かしたプロトタイプ実装として位置づけられます。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitignore: file
  • Cargo.toml: file
  • LICENSE: file
  • README.md: file
  • SKILL.md: file

…他 15 ファイル

まとめ

Rustで作られた遊び心ある物理化ツール。軽量で実験的なプロトタイプ。

リポジトリ情報:

READMEの抜粋:

🌍 Antigravity Claw

Make any webpage defy gravity — powered by a real Rust physics engine.

Fetches any URL, extracts DOM elements, runs a 2D physics simulation with Verlet integration and AABB collision detection, and renders an interactive HTML animation you can open in any browser.

Inspired by three things called “Antigravity”:

  • 🔍 Google Gravity — the viral Chrome easter egg by Ricardo Cabello (Mr.doob)
  • 🐍 import antigravity — Python’s stdlib easter egg referencing [XKCD…