・・・執筆中・・・
ViVi プロジェクト可視化機能
Nobuhide Tsuda
20-Mar-2010

概要

ViVi 3.03/04 に、力学モデルによりプロジェクトに含まれるファイル群を可視化する機能をとりあえず実装した。 ディレクトリ構成・更新日付順・ファイルサイズ・インクルード依存レベル・ インクルード依存線などによりプロジェクトを可視化する機能がある。 本機能により、多くのファイルを含むプロジェクトの全体像把握がすこーし容易になった。

目次

  1. はじめに
  2. プロジェクトメンバファイル可視化機
  3. 力学モデル
  4. 評価・今後の課題
  5. おわりに

はじめに

密室の中では何が行われているのか分からない。違法行為がおこなわれてるやも・・・
そこで「可視化(Visualize)」の出番です。

図1. メンバファイル一覧画像:

上図は nvi 1.79 のソースコード群を ViVi のプロジェクトに取り込み、一覧表示したものである。

一覧表の問題点

というわけで、ViVi 3.03/04 にプロジェクトファイル群を可視化する機能を実験的に実装してみた。

百聞は一見にしかず:

図2. 可視化画像(ランダム配置):

図3. 可視化画像(力学モデルによる配置):

プロジェクトメンバファイル可視化機能

操作

ファイル一覧 vs ディレクトリごとにグループ化され可視化したファイル一覧

設定

可視化例

図4. 更新日付によりノード背景を色を変化、左上の数字は依存レベル(ViVi 3.03 プロジェクトの一部):

図5. インクルードされているファイルをなるべく下に配置(FFFTP プロジェクトの一部):

力学モデル

力学モデル
ノードを質点とみなし、速度・加速度・抵抗を計算し、次の位置を計算
2次元で計算する場合と、3次元で計算し2次元に投影して表示する方法がある。

バネモデル
関係のあるノード間にバネ力を設定するモデル。
t を目標距離、d を実際の距離、Cs をバネ定数とするとき、ノード間力(プラスなら引力) Fs を以下で定義する。

Fs = Cs * (d - t)

上記は線形の通常の力学バネと同一であるが、差が大きい場合にノード間力が大きくなりすぎるので、 log を取ることが多いようだ。(非線形バネモデル?)

Fs = Cs * (log d - log t) = Cr * log(d/t)

ノード間反発力
全てのノードがなるべく重ならないよう、ノード間に距離の二乗に反比例する斥力を設定する。

Fr = Cr / d^2

抵抗

速度、速度^2 などに比例した抵抗力を設定し、ノード位置が安定するようにする。

その他のモデル
関係線がなるべく水平垂直になるような場の力を設定するモデルもある。

評価・今後の課題

評価

今後の課題

おわりに

可視化機能が、なんか面白そうなのでとりあえず実装してみた。後悔はしていない。