【やってみた】リーマン多様体へのグラフ描画アルゴリズムの実装【実装してみた】...

37
【やってみた】 リーマン多様体上への グラフ描画アルゴリズムの実装 【実装してみた】 情報通信研究機構 高野 祐輝 1

Upload: yuuki-takano

Post on 18-Jul-2015

106 views

Category:

Software


0 download

TRANSCRIPT

【やってみた】 リーマン多様体上への

グラフ描画アルゴリズムの実装 【実装してみた】

情報通信研究機構 高野 祐輝

1

バネモデルレイアウト

2

グラフ描画アルゴリズム

エッジでつながっているノード同士 はバネで引き寄せられている

ノード同士は反発力が働いている

引き合う力

反発しあう力

リーマン多様体上における バネモデルレイアウト

3

ユークリッド空間ではなく 曲がった空間上における バネモデルレイアウト

元論文

Kobourov, S. G., and Wampler, K. Non-Euclidean Spring Embedders.

IEEE Trans. Vis. Comput. Graph. 11, 6 (2005), 757‒767.

4

本発表の目的

5

実装デモが主目的

6

数学的な厳密性や細かな解釈は とりあえず横においておき

実装可能な段階までブレークダウンしてみる

7

なぜなら可視化の目的は 数学でも科学でもなく

8

芸術なので美しければよかろうなのだ!

9

元論文の説明(1)リーマン多様体 M は,すべての点 x ∈ M で

接ベクトル空間を持つ

リーマン多様体上の a と b を結ぶ 連続曲線 γ: [a, b] → M の長さは

length(γ) =b

a||γ(t) ||dt

となり,任意の点 a, b 間を最小とする曲線の長さが 点 a, b 間の距離と定義され d(a, b) と表す

10

元論文の説明(2)

1. 全ての y ∈M に対してτ-1x (τx(y)) = y2. ||τx(y) || = d(x, y )3. τx は原点に対する角度を維持する4. Range(τx) = M5. Range(τ-1x ) = TxM

ここで,すべての点 x ∈ M でリーマン多様体と 接ベクトル空間への写像を

τx: M → Tx M,τx-1: Tx M → Mと定義する. ただし,τx とτx-1 は以下の条件を満たすとする.

11

元論文の説明(3)

generateinitial layout(G)while not donedofor n∈G dox := position[n]G := τx(G )x := force directedplacement(n, G )position[n] := τ-1x (x )

endend

すると,リーマン多様体上における バネモデルレイアウトのアルゴリズムは以下のようになる

12

なるほど よくわからん!

13

数式と実装までに 乖離がありすぎ

14

数式ではなく 「距離」と「力の向き」の 2つに注目して考える

15

考え方の基礎(1) リーマン多様体上における2点間の距離

曲面上の2点間を最短で結べる曲線の長さ

最短曲線

A

B

16

考え方の基礎(2) リーマン多様体上における2点間に働く力の向き

最短曲線

A

B

接平面における最短曲線の方向が 局所空間における力の向きとなる

接平面

17

力の向き

考え方がわかったところで 具体的に球面幾何上での レイアウトを考えてみる

18

球面幾何上へのグラフレイアウト(1) 極座標表記

x

y

z

φ

θ

a

半径1の単位球面を考えると 球面上にある任意の点 a (x, y, z)は θ∈ [0, 2π) とφ∈ [0, π)

で表せる

19

球面幾何上へのグラフレイアウト(2) 極座標・直交座標変換

x

y

z

φ

θ

a

極座標から直交座標への変換は(cosθcosφ, sinθsinφ, cosθ)

で行える

20

球面幾何上へのグラフレイアウト(3) 接ベクトル空間

x

y

za

ua va任意の点 a の接ベクトル ua, va は

ua = (-cosθcosφ, sinθsinφ, sinθ)va = (sinφ, cosφ, 0)

と表わせ,点 a に及ぼす力は この接ベクトル空間で考えることができる

21

球面幾何上へのグラフレイアウト(4) 2点間に及ぼす力

x

y

za

b

いま点 a, b があり 点 a が b へ,ある力 F(a, b)で 引き寄せられているとする

このときの F(a, b)について考える

引き合う力

22

球面幾何上へのグラフレイアウト(5) 接ベクトル空間への写像と力の向き

まず,点 b から 点 a の 接ベクトル空間への写像 b’

について考える

ベクトル a b’ が 局所空間で

点 b が 点 a に 及ぼす力の向きとなるx

y

za

b

b’

力の向き

23

球面幾何上へのグラフレイアウト(6) 直線 b b’

点 b を通りベクトル a と 平行な直線 b b’ を考えると

この直線 b b’ は

x

y

za

b

b’

x -bxax = y-byay = z-bzaz

と表せ,媒介変数 t を使うとx = bx+ ax ty = by+ ay tz = bz+ az tとなる

aと平行な直線

24

球面幾何上へのグラフレイアウト(7) 点 a の接平面

点 a の接平面は

x

y

za

b

b’

ax (x - ax) + ay (y - ay) + az (z - az)

となる

25

球面幾何上へのグラフレイアウト(8) b’の導出(A)

x

y

za

b

b’

ax (x - ax) + ay (y - ay) + az (z - az)x = bx+ ax ty = by+ ay tz = bz+ az t

へ代入すると t が求まる

t を x = bx+ ax ty = by+ ay tz = bz+ az t

へ代入すると b’ が求まる

26

球面幾何上へのグラフレイアウト(9) b’の導出(B)

x

y

za

b

b’

ax (bx+ ax t-ax ) + ay (by+ ay t-ay ) + az (bz+ az t-az ) = 0(a2x + a2y + a2z )t = a2x + a2y + a2z -axbx-ayby-azbz

t = a2x + a2y + a2z -axbx-ayby-azbz

a2x + a2y + a2z

すなわち t は

となる.ただし単位球面なので

t = 1-axbx-ayby-azbz

となり,b’つまり力の向きが求まる

27

球面幾何上へのグラフレイアウト(10) 力の大きさ

点 a, b 間の力の大きさは 点 a, b の球面上の距離 d(a, b)

で表される

x

y

z a

ただし,球面幾何なので d(a, b)は 点 a, b のなす角ψで表される

28

球面幾何上へのグラフレイアウト(11) 点 a, b のなす角ψ

点 a, b のなす角ψは 球面三角法の余弦定理より

となるx

y

z a

b

N

ψ

cosψ= cosθa cosθb+ sinθa sinθbcos(φa-φb)ψ= cos-1(cosθacosθb+ sinθa sinθbcos(φa-φb))

29

球面幾何上へのグラフレイアウト(12) 力の向きと大きさ

力の向き b’ - a と 力の大きさψ が得られた

x

y

za

b

b’

ψ

力の向き

力の大きさ

あとは点 a を実際に動かすのみ

30

球面幾何上へのグラフレイアウト(12) 点 a の動き

x

y

za

b

b’

ψ

力の向き

力の大きさ

点 a の球面幾何上の動きは, ベクトル (b’ - a) と a の外積

(b’ - a)☓a を軸として

角度cψだけ回転させれば良い (cは定数)

b’ - a

外積(回転軸) (b’ - a)☓a

任意軸の回転はクォータニオンで 実現可能

31

球面幾何上へのグラフレイアウト(13) 力の合成

力の合成は,接ベクトル空間で ユークリッド空間と同じように考えれば良い

a

F1

F2

F1+F2

32

球面幾何上へのグラフレイアウト(14) バネモデルレイアウト

力の計算方法がわかったので あとはバネモデルレイアウトの手順を

そのまま適用すれば終了

33

ね?簡単でしょう?

34

ソースコード

35

https://github.com/ytakano/rinne

デモ36

まとめ• 数式ではなく考え方を理解する

• 一見難しそうな数式でも,背景にある考え方を理解すれば実装できる

• 考え方がわかれば,数式も理解できる

• とにかく実装してみる

• 数学的な厳密性はあとでじっくり考える

• Try and Errorを繰り返す.たくさん失敗してみる.何度も何度も.

• 美しいは大正義37