- 行列は学校で学ぶ重要な線形代数の概念の1つであり、さまざまな問題を解くのに役立つ。この記事では、Schemio というインタラクティブ図表エディタを開発する中で、行列をどのように活用したかを説明している。
Schemioの初期開発段階
- 初期のSchemioはシンプルな形で、ユーザーは図形を作成し、移動、サイズ変更、回転ができた。
- 図形は位置、サイズ、回転角で定義された単純な領域として表現されていた。
- データ構造は図形をフラットな配列で表していた。
階層構造の問題
- 図形同士を接続し、複雑な相互作用を作るために、アイテム階層構造 を導入した。
- SVGを使えば階層構造を簡単にレンダリングできるが、Schemioはレンダリング以上の機能を提供する必要があった。
- ローカル座標とワールド座標の間の変換が必要だった。
スケーリングとピボットポイント
- スケーリングはオブジェクトのサイズを動的に調整できるようにし、ピボットポイントは回転の中心を定義する。
- スケーリングとピボットポイントを追加したことで変換管理が複雑になり、行列を使ってこの問題を解決した。
行列変換の基礎
- 変換は行列を使って表現できる。たとえば、空間上の1点は3x1行列で表現される。
- 変換行列と点の行列を掛け合わせることで、変換後の点を得られる。
- 変換行列を組み合わせることで、さまざまな変換を実行できる。
ワールド座標とローカル座標
- ローカル座標をワールド座標に変換するのは簡単だが、その逆は複雑である。
- 行列の逆行列を使って、ワールド座標をローカル座標に変換できる。
オブジェクトの装着と分離: 階層変換の課題
- オブジェクトを別のオブジェクトにドラッグ&ドロップしたり、階層構造を変更したりするときは、新しい位置と回転を再計算する必要がある。
- ドラッグされたオブジェクトの位置と回転を調整し、画面上で自然に移動するようにする。
まとめ
- Schemioの開発過程では、数学的な概念を活用して複雑な問題を解決した。
- プロジェクトに興味があれば、GitHubでソースコードを確認でき、SchemioのWebサイトで実際に試すこともできる。
1件のコメント
Hacker Newsの意見
Schemioという新しいオープンソースソフトウェアを発見したことへの興味
Adobe PostScriptが1980年代に変換行列を大衆化した
WebGLFundamentals.orgの資料は変換階層構造についての優れた入門書である
著者が同次座標について調べてみることを提案している
QGraphicsViewフレームワークは非常に強力なグラフィックスフレームワークである
3x3の同次行列を使って2Dで変換することの面白い側面
Schemioは素晴らしく見える
興味深い記事とソフトウェア
オブジェクトを移動するとき、多くの子オブジェクトがある場合は、すべての子の A(i-1) 項を更新しなければならない
Schemioは非常に美しく、実際に使う価値がありそうだ