世にいろんなソーシャルグラフのライブラリがあるのでそれらを使えば一瞬なんだろうけど幾何学的なことを理解したくて、本を読みながら部品から一個一個全部作りました。詳しくは書かないけれどこんな感じのテクニックを使っています。
- 正N角形
- 三角関数 cos, sin
- ベジェ曲線
# コントロール的なロジックはSocialGraphというclassに集約されていて、引数はcsvファイルと、半径です。
SocialGraph(SocialGraphCsv csv, int radius)
こういうCSVを渡すとカラム数を拾って自動的に正N角形を描写して、人名や線を描写してくれます。
Tatsuya Suzuki | Emi Ito | Bruno Barroso | Mattew Day | Maxim Dokhlov | Mehmet Bagbekleyen | Alex Yixnitsky | Stuart Gardner | Derrick May | |
Tatsuya Suzuki | 0 | 50 | 19 | 10 | 9 | 11 | 15 | 2 | 0 |
Emi Ito | 0 | 0 | 2 | 3 | 3 | 2 | 1 | 2 | 1 |
Bruno Barroso | 0 | 0 | 0 | 4 | 3 | 17 | 1 | 2 | 1 |
Mattew Day | 0 | 0 | 0 | 0 | 4 | 5 | 1 | 2 | 1 |
Maxim Dokhlov | 0 | 0 | 0 | 0 | 0 | 4 | 1 | 2 | 1 |
Mehmet Bagbekleyen | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 2 | 1 |
Alex Yixnitsky | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
Stuart Gardner | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Derrick May | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
共通の友人の数は以下のURLで取得できます
https://www.facebook.com/<person A>
- SocailGraph: 統括コントローラ
- Coordinate: 座標を保持する
- EquilateralPolygon: 等辺三角形を描写する
- nodeNames: ノード(Facebookの例だと)の名前
- FamiliarityAsLine: 親しさを線(の太さ)で表します
nodeNamesとFamiliarityAsLineはEquilateralPolygonに依存していますが、それぞれ独立した画像として再利用可能です。