はてなキーワード: 舞美とは
○ご飯
朝:カップヌードル。昼:なし。夜:チキンケサディーヤ、フライドポテト、ガーリックトースト、ミニカレー、ビール、ハイボール、レモンサワー。間食:ばかうけ。
○調子
美少女ゲームらしい数人のヒロインと恋愛関係を結んでいく展開と、100年に一度蘇り殺人を行う黄泉人を巡るフーダニット的な展開とが合わさったテキストが主体のアドベンチャーゲーム。
親しい人の死から生きることへの意欲が薄い主人公が転校して奇妙な部活に参加するスタートで、同居人で主人公へは横暴ながら学校ではその見た目ででモテモテな楠瀬舞美、大金持ちで価値観が食い違うものの努力家の神代沙也、無口だがメイド姿でバイトする可愛いもの好きの甘奈未海、瓶ぞこグルグルメガネで顔を隠しているオタク口調の山田花子、攻略ヒロイン唯一の社会人で年上のお姉さんで推理力がある音無雪乃といった5人のヒロインと交流する。
その交流の傍ら、100年に一度死から蘇った黄泉人を探すサスペンスな展開もある。
この辺はルートごとに味わいが違っていて、舞美、沙也、花子はかなり恋愛より。
ルートも固定されてて、前者の組みを攻略してから、後者の組みを攻略するので、恋愛パートを楽しんでから、サスペンスパートを楽しむ構成だ。
無気力な主人公が生きる意味を見出したからこそ、一度死んでいる黄泉人に向き合えるような展開で、それぞれはパラレルな関係ながら、読者の目には一貫しているように感じる構成の面白さがある。
恋愛パートは無気力な主人公が、活力あるヒロイン達に振り回されていくうちに、人生に前向きになる展開が多い。
ただこの恋愛パートが本当にただ主人公とヒロインの交流一辺倒で、例えば楽しい趣味とか、美味しいものを食べるとか、家事の工夫とか、そういう生きること全般へのアプローチがないのはゲームしてる感だった。
この辺は色々と好みがありそうだけど、ちょっと僕の好きとはズレてたかも。
誰が復活した黄泉人なのかを探る展開なんだけど、こちらは前提条件となる情報が出揃うのがずいぶん遅い。
所謂特殊設定ミステリをやろうとしているのは伝わるものの、この手の謎解きで設定開示が遅いのはあまり印象がよくなかった。
パズラー的な犯人当てロジックや、推理可能な特殊設定の妙を楽しむのではなく、徐々に明かされる設定を緊張感を持って怯えながら読み進めていくのが制作者の想定する味わいで、どちらかといえばホラーよりの作風だったのかも。
少し腐してしまったが、僕の好みであるフェアな本格らしさが薄いというだけで、サスペンスフルなホラーな作品として読めば面白い部分も多々あった。
恋愛とミステリの接着も、ヒロインがあまり僕の好みではないものの、物語の構造としてはちゃんと恋愛で得たものが、ミステリへの解答に直結する様が面白かった。
特に攻略ヒロイン含めて、誰が味方か、誰が敵かがわからない序盤の緊張感はかなりあった。
サブキャラも多いため、この敵か味方かを少しづつ探っていく展開は面白かった。
ゲーム的なシステムの部分が、物語にも関わってくるメタ的な展開で、そこを仕掛けに使うのかあ、とビックリした。
正直なところ、前振りもあったし、そもそもこのシステム自体がSFC〜PSぐらいまでによく見たもので、最近(発売は2018年)はあまりみない。
それだけに、こんな感じのメタ的な仕掛けはありそうだなあ、と読者としてもメタ推理が出来ていが部分はある。
しかし、このメタ的なサプライズ展開が、ただ読者を驚かせるものになっているだけでなくて、ちゃんと犯人を当てるための展開に密接している点が、かなり好みの展開だった。
何故そこに仕掛けが必要だったのか、という一歩先を読まないと犯人当ての正解まで辿り着けなかったのは、かなりちゃんとミステリをやっていると感じた。
最後のサプライズ展開にまつわるエピソード群は本当に決まっていて、終わりよければ全てよしな、道中のしっくりこない点を吹き飛ばす力強さがあった。
公称ジャンルの「恋愛ミステリー・アドベンチャー」の通り、恋愛とミステリが接着した良い作品だった。
その上で恋愛パートの好みや、ミステリ的な部分への好みの差はあったものの、そういう細かい機敏を無視できるほどに、大仕掛けが面白かった。
http://anond.hatelabo.jp/20170117225147
関ジャニ∞は2002年デビュー、NEWSは2003年だから違う。(途中からヲタになった可能性もあるが、それを含めたらきりがなくなるので考えないことにする)
perfume(2000~)は大きな仕事が多いので「あまり来ないけど、極たまに大きな仕事」が当てはまらない。
Negicco(2003~)は後輩に当たる人がいない。
モーニング娘。で2005年デビューは7期メンバーの久住小春(きらりんレボリューションの中の人)ただ一人だけど後輩のフォローはしないし、今は事務所を離れているので違う。
Berryz工房(2004~2015)はどうか。熊井ちゃんこと熊井友理奈の可能性もある。「トークがいまいち」は完璧に当てはまる(しかしそれは最高のトークでもある)し、桂由美ファッションショーの新作モデルに起用されたのは「極たまに大きな仕事」だろう。しかし一昨年から無期限活動休止なので現在形の文章とは齟齬が出てくる。
となると℃-ute(2005~)の可能性が高い。今年の解散が決まっているがまだ現在形。
さて
の中の誰か?
「昔はああいうこと言ってたのに丸くなってきたな」から舞美は除外される。舞美は昔からものすごく性格がいい。メンバーも10年間で3回しか怒った姿を見たことがないそうだ。
「極たまに大きな仕事」という点で、バラエティー番組の出演の多い岡井ちゃんとソロ仕事がないマイマイも違う。
「歌うまくなったなー」は上手かったのがさらに上手くなった愛理を指すのか、下手なりに上手くなったnkskを指すのか。
当たってますか?
ちなみに私の℃-ute一推し曲は「世界一HAPPYな女の子」
ぜんぜん増田に対する答えにはなってないけど、自分を見ているようなので嬉しい。
2000年初頭のハロプロ全盛期だった頃は一般人の会話に混じるくらいだったけど、彼氏がハロヲタだったのをきっかけに完全にハロプロに舞い戻ってハマッた。ドアップやyoutubeで映像を漁るし、何度も再生してニヤニヤしながら眺めるし、iPodには娘フォルダを作るし、彼と一緒に娘コンとか行ってしまうくらい。
ちなみに私の好きなハロっ子は
・松浦亜弥
・久住小春
・藤本美貴
です。ちょっと増田と共通点があるよね。面白い。
℃-uteはこの子!っていうのはいないけど、愛理は歌うまいし舞美は超美人だと感心する。「桜チラリ」の頃の萩原舞ちゃんはかなり抱きしめたい。
AKB48では中西里菜ちゃんが好きだった。やめてしまったけど……。
ちなみにグラビアアイドルも好きですよ。
きわどいのとかエグイのじゃなくて、Sabraに乗ってる程度の、そこそこ上品なグラビアとか大好き。一時期は毎号Sabraを見てた。
仲根かすみがすごい好きだったから、結婚してやめた時はへこんだなあ。
ほしのあきも好き。
彼女たちのPVや映像を何度もリピートしてしまう理由は、ちょっと増田に近いです。
自分がそんな風になりたいわけじゃないし、なれるとも思わないし、バイやレズでもないと思うけど、彼女たちの映像を見ていると幸せになる。夢という言葉はかなり的確。
男がスポーツ選手やバンドマンに憧れるのと同じ心理だというのはなるほどですね。
ちなみに私も周囲にはハロヲタだって隠してます。
実は隠れ女アイドルヲタの人って多いんじゃないかと思った。どうなんでしょうね。
発祥: http://ex23.2ch.net/test/read.cgi/morningcoffee/1188654905/
Scheme という Lisp 語族の言語を用いて ℃-ute の相関関係をプログラムし、様々な角度から関係性を分析する手法を紹介していきます(ソースコードは最後に張ります)。
まずは、メンバー間の関係を「リスト」というデータ型で表現します。例えば「栞菜->愛理」という関係は
(kanna . airi)
という形で表すことができます。これに、「大好き」という情報を付加し、ついでにその関係の性質を数値化したものを加えると
((kanna . airi) (desc "大好き") (score . 1))
のようになり、関係図における一つの矢印の情報をデータ化できたことになります(暫定的に、好意は 1、良好・中立は 0、険悪は -1 の3段階で表すことにします)。
メンバー間の全ての関係性をこのデータ単位で定義し、データベース化しておくことで、色んな条件に基づいた検索やスコア計算などが可能となります。
ここで相関関係図における矢印を「リンク」と呼ぶことにして、あるメンバーから他のメンバーへどのようにリンクし、またリンクされているかを調べることができます。
(sort-nodes (number-list (from-links)))
結果:
((kanna . 6) (saki . 5) (maimi . 4) (erika . 3) (mai . 3) (chisato . 3) (airi . 2))
栞菜ちゃんがメンバー全員にリンクを張っていることが分かり、℃-ute ラブっぷりが伺えます。なっきーにも同様の事が言えます。例の「女の子が好き」発言を数値的に裏付ける結果と言えるかもしれません。
ただ、データ不足でリンク件数がまだ少ないのと、リンクの性質(好意/反感など)までは分からない点を考慮する必要があるでしょう。
同様に、リンクの終点の件数を調べてみます。
(sort-nodes (number-list (to-links)))
((chisato . 5) (erika . 5) (kanna . 4) (maimi . 4) (airi . 4) (mai . 3) (saki . 1))
えりかちゃんと千聖ちゃんが高ポイントです。メンバーからの人気や注目度の高さを示すデータですが、千聖ちゃんの場合敵対的なリンクが2件含まれている点に注意してください。
なっきーの被リンク数が極端に少ないですが、単純にデータ不足のためだと思われます。はぶら(ryとか言わないようにお願いします。
リンクに付随するスコアを計算することで、愛情の度合いを測ることができるのではないか、という考えに基づく研究です。
まず、全ての関係性を対象として、スコアがマイナスの関係を抽出してみます。
(filter-nodes (lambda (n) (< (score-relation n) 0)))
結果:
(((kanna . chisato) (desc "愛理に手出すんじゃねぇよ") (score . -1)) ((saki . chisato) (desc "愛理に手出すんじゃねぇよ") (score . -1)))
件数だけを得ると
(length (filter-nodes (lambda (n) (< (score-relation n) 0))))
2
僅か2件です。
良好・中立的な関係は
(length (filter-nodes (lambda (n) (= (score-relation n) 0))))
8
愛に満ちた関係は
(length (filter-nodes (lambda (n) (> (score-relation n) 0))))
16
非常に多いです。舞美ちゃんの「℃-ute同士でラブラブなんですよ」発言(例のラジオ)を数値的に裏付ける結果と言えるんじゃないでしょうか。
次に、メンバーごとのスコアを算出してみます。Lisp 的には以下のようにフィルタリングと畳み込み (fold) で計算することができます。例えば
(foldr (lambda (n acc) (+ (get-score n) acc)) 0 (filter-nodes (cut to? <> 'kanna)))
3
上式を一般化して一挙にメンバー全員に適用してみると
(sort-nodes (map (lambda (x) (cons x (score-loved x))) (all-members)))
結果:
((airi . 4) (kanna . 3) (mai . 2) (erika . 2) (maimi . 2) (saki . 1) (chisato . 0))
愛理ちゃんが好意を寄せられやすい傾向が伺えます。
今度は逆方向のスコアを計算してみると
(sort-nodes (map (lambda (x) (cons x (score-loving x))) (all-members)))
((kanna . 3) (maimi . 3) (chisato . 2) (airi . 2) (saki . 2) (mai . 1) (erika . 1))
まいまいとえりかちゃんが特に堅い・一途だという傾向を読み取ることができます。
今度は組み合わせ(カップリング)の評価です。
2点間相互のリンク・スコアを加算したものを「相性」と考えられるものとします。最大値 (互いに好意を寄せている場合の数値) は現在のスコアリング方式では 2 です。例えば
(score-between 'kanna 'airi)
の値は
2
となります。1 であれば一方通行と考えます。
関係性が未定義の場合もあるので 0 のものを除外して算出すると
(sort-nodes (filter (lambda (n) (not (= (cdr n) 0))) (map (lambda (n) (cons n (apply score-between n))) (all-combinations))))
(((chisato mai) . 2) ((chisato airi) . 2) ((airi kanna) . 2) ((saki kanna) . 2) ((kanna maimi) . 2) ((erika maimi) . 2) ((saki airi) . 1) ((saki erika) . 1) ((kanna mai) . 1) ((maimi airi) . 1) ((saki chisato) . -1) ((kanna chisato) . -1))
となります。若干ピンとこない部分もあるかも知れませんが、計算上は矛盾無くデータの内容を表しています。
(map (lambda (p) (find-relation (cons (caar p) (cadar p)) identity)) (filter (lambda (n) (= (cdr n) 1)) (map (lambda (n) (cons n (apply score-between n))) (all-combinations))))
(((kanna . mai) (desc "喰ってやるよ") (score . 1)) ((saki . airi) (desc "好き") (score . 1)) ((maimi . airi) (desc "良き妹") (score . 1)) ((saki . erika) (desc "彼氏にしたい") (score . 1)))
のようになります。
以上の調査を経て気になった問題点を列挙してみます。
特に最初の点に関して、「百合的」なるものの質的評価がなかなか難しいと感じました。例えば「大好き」も「良き妹」も同じ 1 と評価してしまっているのが妥当かどうか、といったことです。
また、スレにて与えられた情報を評価・分析する方法としては有効だとしても、逆方向のフィードバックの手段がなかなか見つからないというのが三つ目の問題です(技術力不足とも言います)。(注:画像化の方法が分かりました。追記参照)
最後に、プログラムのソースを示します。実行には PLT Scheme が必要です。文字コードは UTF-8 で保存した上で、(load "c-ute.ss") としてください。文字化けする場合はターミナルが UTF-8 を表示できるよう設定する必要があります。がんばってください。
c-ute.ss:
(require (lib "etc.ss") (lib "list.ss") (lib "26.ss" "srfi") (lib "delete.ss" "srfi" "1")) ;;; Utilities (define true? (compose not not)) (define (ignore _) #f) (define fif (case-lambda ((predicate consequent) (fif predicate consequent ignore)) ((predicate consequent alternative) (lambda (x) (if (predicate x) (consequent x) (alternative x)))))) (define (concat! xs) (apply append! xs)) (define (mapconcat f lst sep) (let lp ((str (f (car lst))) (lst (cdr lst))) (if (null? lst) str (lp (string-append str sep (f (car lst))) (cdr lst))))) (define (slice-string str len) (let lp ((res '()) (str str)) (if (<= (string-length str) len) (reverse! (cons str res)) (lp (cons (substring str 0 len) res) (substring str len))))) (define (break-string str len) (mapconcat identity (slice-string str len) "\\n")) ;; NOTE: input and output ports have to be either file-stream or #f ;; (i.e., cannot be a string port) (define (run exe opt in out) (let-values (((p p-i p-o p-e) (subprocess out in #f exe opt))) (subprocess-wait p) (close-input-port p-e))) ;;; Database ;; http://ja.wikipedia.org/wiki/%E2%84%83-ute (define names '((erika . "えりか") (maimi . "舞美") (saki . "早貴") (airi . "愛理") (chisato . "千聖") (mai . "舞") (kanna . "栞菜"))) (define (symbol->name sym) ((fif true? cdr) (assq sym names))) (define nodes '()) (define edges '()) (define (relate from to desc score) (let ((n (cons from to))) (or (find-relation n (lambda (r) (let ((d (assq 'desc r)) (s (assq 'score r))) (set-cdr! d (cons desc (cdr d))) (set-cdr! s (+ score (cdr s)))))) (begin (set! nodes (cons n nodes)) (set! edges (cons (cons n `((desc ,desc) (score . ,score))) edges)))))) (define (find-relation n k) ((fif true? k) (assoc n edges))) (define (related? x y) (find-relation (cons x y) (lambda (_) #t))) (define (from? n x) (eq? (car n) x)) (define (to? n x) (eq? (cdr n) x)) (define flip-relation (case-lambda ((n) (and (related? (cdr n) (car n)) (cons (cdr n) (car n)))) ((n k) ((fif true? k) (flip-relation n))))) (define (get-score n) (cdr (assq 'score n))) (define (get-description n) (cdr (assq 'desc n))) (define (describe-relation n) (find-relation n get-description)) (define (score-relation n) (or (find-relation n get-score) 0)) (define (print-node . ns) (for-each (cute find-relation <> (lambda (r) (display (format "| ~a => ~a (~a)~%" (caar r) (cdar r) (mapconcat (lambda (s) (string-append "\"" s "\"")) (cdr (assq 'desc r)) ", "))))) ns)) (define (iter-nodes k) (let lp ((nodes nodes)) (unless (null? nodes) (k (car nodes)) (lp (cdr nodes))))) (define (filter-nodes p) (let ((ns '())) (iter-nodes (fif p (cut find-relation <> (lambda (n) (set! ns (cons n ns)))))) ns)) (define (from-links) (map car nodes)) (define (to-links) (map cdr nodes)) (define (all-members) (delete-duplicates! (from-links))) (define (all-pairs) nodes) (define (ordered-pairs) (concat! (map (lambda (x) (map car (sort (filter-nodes (cute to? <> (car x))) (lambda (x y) (> (get-score x) (get-score y)))))) (sort-nodes (map (lambda (x) (cons x (score-loved x))) (all-members)))))) (define (all-combinations) (let lp ((cs '()) (ns nodes)) (if (null? ns) cs (let ((n (car ns))) (lp (if (member (list (cdr n) (car n)) cs) cs (cons (list (car n) (cdr n)) cs)) (cdr ns)))))) ;; number-list :: [a] -> [(a . Int)] (define (number-list ls) (let lp ((ns '()) (ls ls)) (if (null? ls) ns (let ((x (car ls))) (lp ((fif not (lambda (_) (cons (cons x 1) ns)) (lambda (n) (set-cdr! n (add1 (cdr n))) ns)) (assq x ns)) (cdr ls)))))) ;; sort-nodes :: [(a . Int)] -> [(a . Int)] (define (sort-nodes ns) (sort ns (lambda (x y) (> (cdr x) (cdr y))))) (define (diff-nodes ms ns) (let lp ((ds '()) (ns ns)) (if (null? ns) (sort-nodes ds) (lp (let* ((n (car ns)) (m (assq (car n) ms))) (cons (cons (car n) (- (cdr m) (cdr n))) ds)) (cdr ns))))) (define (get-total-score x p) (foldr (lambda (n acc) (+ (get-score n) acc)) 0 (filter-nodes (cut p <> x)))) (define (score-loved x) (get-total-score x to?)) (define (score-loving x) (get-total-score x from?)) (define (score-between x y) (+ (score-relation (cons x y)) (score-relation (cons y x)))) (define (-> x) (display (format "~%Links from [~a]~%" x)) (iter-nodes (fif (cut from? <> x) print-node))) (define (<- x) (display (format "~%Links towards [~a]~%" x)) (iter-nodes (fif (cut to? <> x) print-node))) (define (<-> x) (display (format "~%Reciprocal links for [~a]~%" x)) (iter-nodes (fif (cut to? <> x) (lambda (n) (flip-relation n (lambda (m) (print-node m n))))))) (define (<=> x) (display (format "~%Reciprocal matches for [~a]~%" x)) (iter-nodes (fif (cut to? <> x) (lambda (n) (flip-relation n (lambda (m) (if (ormap (lambda (x) (ormap (lambda (y) (equal? x y)) (describe-relation m))) (describe-relation n)) (print-node m n)))))))) (define (<?> x) (let ((to (assq x (number-list (from-links)))) (from (assq x (number-list (to-links))))) (display (string-append (format "~%Link statistics for [~a]~%" x) (format "| ~a => ~a (love ~a)~%" x (cdr to) (score-loving x)) (format "| ~a => ~a (love ~a)~%" (cdr from) x (score-loved x)))))) (define (info x) (for-each (cut <> x) (list <- <-> <=> -> <?>))) ;;; GraphViz (http://www.graphviz.org/) support (define graphviz "C:/Program Files/ATT/Graphviz/bin/dot.exe") (define (nodes->dot ns) (string-append "digraph cute {\n" ;;"\tordering=out;\n" ;;"\trankdir=LR;\n" "\toverlap=true;\n" "\tnode[fontname=\"msgothic.ttc\"];\n" "\tedge[fontname=\"msgothic.ttc\",fontsize=9];\n" (let lp ((str "") (ns ns)) (if (null? ns) str (let* ((n (car ns)) (s (score-relation n))) (lp (string-append str (format "\t\"~a\" -> \"~a\"" (symbol->name (car n)) (symbol->name (cdr n))) (format "[label=\"~a\",color=\"~a\"," (break-string (car (describe-relation n)) 7) (cond ((> s 0) "red") ((= s 0) "green") (else "blue"))) (format "style=\"bold~a\"];\n" (if (and (not (= s 0)) (< s 1) (> s -1)) ",dashed" ""))) (cdr ns))))) "}")) (define (write-dotfile dot file) (and (file-exists? file) (delete-file file)) (with-output-to-file file (lambda () (display dot))) file) (define (dot->png dot png) (call-with-input-file (write-dotfile dot "c-ute.dot") (lambda (in) (and (file-exists? png) (delete-file png)) (call-with-output-file png (lambda (out) (run graphviz "-Tpng" in out))))) 'done) ;;; Setup database ;; Based on: ;; http://ex23.2ch.net/test/read.cgi/morningcoffee/1188654905/116-142 (begin (relate 'maimi 'erika "大好き" 1) (relate 'maimi 'kanna "良き妹" 1) (relate 'maimi 'airi "良き妹" 1) (relate 'maimi 'mai "姉妹" 0) (relate 'erika 'maimi "一番可愛いよ" 1) (relate 'erika 'kanna "仲間" 0) (relate 'erika 'chisato "おソロパジャマ" 0) (relate 'kanna 'erika "仲間" 0) (relate 'kanna 'maimi "好き" 1) (relate 'kanna 'saki "喰ってやるよ" 1) (relate 'kanna 'mai "喰ってやるよ" 1) (relate 'kanna 'airi "大好き" 1) (relate 'kanna 'chisato "愛理に手出すんじゃねぇよ" -1) (relate 'saki 'maimi "荷物整理" 0) (relate 'saki 'erika "彼氏にしたい" 1) (relate 'saki 'kanna "興味がある" 0.5) (relate 'saki 'chisato "愛理に手出すんじゃねぇよ" -1) (relate 'saki 'airi "好き" 1) (relate 'airi 'kanna "受け入れる" 1) (relate 'airi 'chisato "最近親密" 1) (relate 'mai 'erika "保護者" 0) (relate 'mai 'maimi "姉妹" 0) (relate 'mai 'chisato "恋人" 1) (relate 'chisato 'erika "おソロパジャマ" 0) (relate 'chisato 'mai "恋人" 1) (relate 'chisato 'airi "最近親密" 1)) ;; query relations / draw graphs (if (file-exists? graphviz) (dot->png (nodes->dot (ordered-pairs)) "c-ute.png") (for-each info (all-members)))
Graphviz というソフトによって関係図を可視化できる、ということを教えていただきました(既に上プログラムを実行すると自動的に関係図画像を作成するようにしてあります)。ここでは技術的な観点から幾つか注意点を挙げておきます。
まず、Scheme プログラムから Graphviz を動かす方法について。コマンドラインからの起動のように、プログラムへのオプション文字列で入出力ファイルを指定する方法ではどうも上手く行きませんでした。調査の結果、入出力ファイルのポートを Scheme 側で用意しておく必要があるようです。処理系によって異なりますが、PLT Scheme の場合 subprocess という関数を次のように呼び出します。
(subprocess output-port input-port #f "/path/to/dot.exe" "-Tpng")
ここで output-port は png 等画像ファイルへの出力ポート。input-port は dot ファイル(グラフの定義ファイル)の入力ポートです。エラーポートは必要無いでしょう (#f)。
dot という名前の実行ファイルが、関係図のような有向グラフを描画するプログラムです。最後にオプション文字列として出力形式を指定します(png, jpeg, gif, etc.)。
次に dot ファイルを Scheme で書く方法ですが、以下の基本的な有向グラフの書式
digraph g { A -> B; B -> C; C -> A; }
を理解すれば、後は実直に Scheme のデータを当てはめて format 関数等で変換するだけです。
(string-append "digraph g {" (format "~a -> ~a;" (car node) (cdr node)) "}")
問題は、ノードを配置する順番によって出来上がる画像が変わってくる、ということです。
より見た目に分かりやすくするための工夫としては、相互にリンクするノード同士が dot ファイル上でも近接して出力されるようにすると良いでしょう。関連の強いものが画像の上でも近くに表示されるようになります。
また上述(特に例3)のスコアの概念を応用し、スコアの低いものが後に出力されるようにすることで、重力感覚に一致するような関係図を得ることができるでしょう。