プログラムのコメントは 全部 Qiita へのリンクでいいじゃないかと思い始めてきた。
サービス終了したらリンク切れ起こすが……。
今回のお話
始まる
緑色の枠線は まあ、何かの画像なのだろう。
そのうち、青色の枠線の部分だけを使いたい。
で、今回求めたい値は……。
緑の枠の中心からみた、青い枠の中心だ。
座標は Unity の Texture2D に倣って 左下を原点 とする。
Unityは数学のグラフでよく見る座標の数字の方向でプログラミングを書け! と言わんばかりだ。
これはチェス盤の座標の振り方でもある。
ちなみに 将棋盤の座標の方向は こう。
右縦書きだ。将棋盤を見た後にチェス盤を見ると 嫌がらせで反対にしてあるのかと思ってしまうが 流行った地方での普通の座標の振り方なのだろう。
で、今まで 左上を原点 とするテキストエディターのような座標でやってきたので
こういうやつだが、既存のコードを Unityに写して何か動かないと思ったんだが 萎えている。
別に 全体の高さを持っておいて 計算部分を Yだけ上下ひっくり返すフィルターでラッピングする とか、画像を上下反転で持っておく とかすればいいんだが、なんかそんな工夫 レガシーを大量生産 するコード汚染だと思ったので Unity が使っている座標に合わせて 書き直すことにする。
座標の上下を反転するような Invert みたいなフラグが無いかググったんだが分からんし。
ここで、2つの Rectangle が分かっているものとする。
数字は適当に今決めた。暗算すると x=-100、y=-15 なんじゃないかと思うんだが その計算の途中を解説しよう。
ここで Y座標は 上に行くと増えるのだった。つい癖で 足し算と引き算を間違えてしまって仕方がない。つらい。
ここで、相対位置を求めるときは、至-自 とすればよい。3から見て7は4離れているし、7から見て3は-4離れている。緑から見た青なので、青-緑 とする。
計算する順番としては、数直線上で数字が大きい方から小さい方へ並べるといいんじゃないか。xなら右の数字から左の数字へ、yなら上の数字から下の数字へ並べると、引き算がしやすい。
X= (120/2 + 360) - (540/2 + 250)
X= -100
y= (690 - 70/2) - (870 - 480/2)
y= 25
なんか暗算と答えが違う。暗算は途中の式なんか残ってないから どこで間違ったのか分からない。
しかしなんだか xとyで書き方が なんか違うのが気持ち悪い。
そうか。
Texture2D(上図赤枠)のX,Yは左下隅なのに、Rect(上図緑枠)のX,Yは左上隅なのか。
変なの……。
検算
青枠の中心は、緑枠の中心から見て 本当に(X,Y) = (-100,25) なのか?
合ってるかどうか調べる方法を考えるのが大変なんだが、
例えば ずれている分を引けば、ずれていない 状態になる。
つまり、中心が合わさるわけだ。
いままで 緑枠と青枠の中心が どれだけ ずれているのか分からなかったので、計算した今 ずれを戻すという操作が可能になった。
縦に410、横に420 ずれているようだ。
これを 折り紙を半分に折るように 半分こすると 縦205 と 横210。
これが何のことを言っているかというと、
青枠と緑枠は 縦に205、横に210離れているよね、ということなんだが、じゃあ 右上角の距離も そうなのかというと、
検算おわり。
プログラムのコメントをどうするのか。
Qiita へのリンクでいいだろ……。
x = (dst.width/2 + dst.x) - (src.width/2 + src.x)
y = (dst.y - dst.height/2) - (src.y - src.height/2)
(2017-02-22 修正) y = (dst.x - dst.height/2) - (dst.y - src.height/2)
こんなコードがあるとして、src画像の中心から見たdst画像の中心の相対座標を求める、とか日本語でコメントを書いていても なんのことだか分からない。
なんだか ぼんやり。