2 ポイント 投稿者 GN⁺ 2024-12-19 | 1件のコメント | WhatsAppで共有
  • 行列は学校で学ぶ重要な線形代数の概念の1つであり、さまざまな問題を解くのに役立つ。この記事では、Schemio というインタラクティブ図表エディタを開発する中で、行列をどのように活用したかを説明している。

Schemioの初期開発段階

  • 初期のSchemioはシンプルな形で、ユーザーは図形を作成し、移動、サイズ変更、回転ができた。
  • 図形は位置、サイズ、回転角で定義された単純な領域として表現されていた。
  • データ構造は図形をフラットな配列で表していた。

階層構造の問題

  • 図形同士を接続し、複雑な相互作用を作るために、アイテム階層構造 を導入した。
  • SVGを使えば階層構造を簡単にレンダリングできるが、Schemioはレンダリング以上の機能を提供する必要があった。
  • ローカル座標とワールド座標の間の変換が必要だった。

スケーリングとピボットポイント

  • スケーリングはオブジェクトのサイズを動的に調整できるようにし、ピボットポイントは回転の中心を定義する。
  • スケーリングとピボットポイントを追加したことで変換管理が複雑になり、行列を使ってこの問題を解決した。

行列変換の基礎

  • 変換は行列を使って表現できる。たとえば、空間上の1点は3x1行列で表現される。
  • 変換行列と点の行列を掛け合わせることで、変換後の点を得られる。
  • 変換行列を組み合わせることで、さまざまな変換を実行できる。

ワールド座標とローカル座標

  • ローカル座標をワールド座標に変換するのは簡単だが、その逆は複雑である。
  • 行列の逆行列を使って、ワールド座標をローカル座標に変換できる。

オブジェクトの装着と分離: 階層変換の課題

  • オブジェクトを別のオブジェクトにドラッグ&ドロップしたり、階層構造を変更したりするときは、新しい位置と回転を再計算する必要がある。
  • ドラッグされたオブジェクトの位置と回転を調整し、画面上で自然に移動するようにする。

まとめ

  • Schemioの開発過程では、数学的な概念を活用して複雑な問題を解決した。
  • プロジェクトに興味があれば、GitHubでソースコードを確認でき、SchemioのWebサイトで実際に試すこともできる。

1件のコメント

 
GN⁺ 2024-12-19
Hacker Newsの意見
  • Schemioという新しいオープンソースソフトウェアを発見したことへの興味

    • Schemioのデザインと雰囲気がとても洗練されている
    • オープンソースであるにもかかわらず、それをことさらに売りにしていない
  • Adobe PostScriptが1980年代に変換行列を大衆化した

    • SVGはPostScriptの画像モデルを多く取り入れている
    • PostScriptでの2D行列の使用に関するリンクを提示
  • WebGLFundamentals.orgの資料は変換階層構造についての優れた入門書である

    • WebGLシーングラフに関するリンクを提示
  • 著者が同次座標について調べてみることを提案している

    • 同次座標に関するWikipediaリンクを提示
  • QGraphicsViewフレームワークは非常に強力なグラフィックスフレームワークである

    • シーン-オブジェクト変換やオブジェクト階層構造を含む強力なツールを提供する
    • Web上でQGVFほどよく動作する代替を見つけられていない
  • 3x3の同次行列を使って2Dで変換することの面白い側面

    • 2D変換は実際には z = 1 平面に沿った3Dでのせん断である
    • 関連するYouTubeリンクを提示
  • Schemioは素晴らしく見える

    • Claudeを使って多くのフローダイアグラムを作っている
    • Schemioを使って同様の作業をしたい
  • 興味深い記事とソフトウェア

    • ダイアグラム向けの強力なオープンソースソフトウェアを探していた
    • Schemioがレーダーに引っかかっていなかったのは不思議だ
    • 変換とアニメーションに幾何代数を使うほうがより直感的かもしれない
    • 幾何代数に関するリンクを提示
  • オブジェクトを移動するとき、多くの子オブジェクトがある場合は、すべての子の A(i-1) 項を更新しなければならない

    • この処理のコストが高いのか気になる
    • 適度なサイズの図形なら問題ないかもしれない
  • Schemioは非常に美しく、実際に使う価値がありそうだ