中心座標の求め方の考え方

プログラムのコメントは　全部 Qiita へのリンクでいいじゃないかと思い始めてきた。
サービス終了したらリンク切れ起こすが……。

#今回のお話
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702212141a9.png?raw=true)
画像の位置は全部　中心座標でいいじゃないか。

#始まる
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702212141.png?raw=true)

緑色の枠線は　まあ、何かの画像なのだろう。
そのうち、青色の枠線の部分だけを使いたい。

で、今回求めたい値は……。

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702212141a2.png?raw=true)

緑の枠の中心からみた、青い枠の中心だ。
座標は　Unity の Texture2D に倣って　**左下を原点**　とする。

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702212141a3.png?raw=true)

Unityは数学のグラフでよく見る座標の数字の方向でプログラミングを書け！　と言わんばかりだ。
これはチェス盤の座標の振り方でもある。

ちなみに　将棋盤の座標の方向は　こう。
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702212141a3b.png?raw=true)
右縦書きだ。将棋盤を見た後にチェス盤を見ると　嫌がらせで反対にしてあるのかと思ってしまうが　流行った地方での普通の座標の振り方なのだろう。

で、今まで　**左上を原点**　とするテキストエディターのような座標でやってきたので
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702212141a3c.png?raw=true)
こういうやつだが、既存のコードを Unityに写して何か動かないと思ったんだが　萎えている。

別に　**全体の高さを持っておいて　計算部分を　Ｙだけ上下ひっくり返すフィルターでラッピングする**　とか、**画像を上下反転で持っておく**　とかすればいいんだが、なんかそんな工夫　**レガシーを大量生産**　するコード汚染だと思ったので　Unity　が使っている座標に合わせて　書き直すことにする。

座標の上下を反転するような Invert みたいなフラグが無いかググったんだが分からんし。

ここで、２つの　Rectangle　が分かっているものとする。
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702212141a4.png?raw=true)
数字は適当に今決めた。暗算すると　x=-100、y=-15　なんじゃないかと思うんだが　その計算の途中を解説しよう。

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702212141a4b1.png?raw=true)
ここで Y座標は　上に行くと増えるのだった。**つい癖で　足し算と引き算を間違えてしまって仕方がない。つらい。**

ここで、相対位置を求めるときは、**至－自** とすればよい。３から見て７は４離れているし、７から見て３は－４離れている。緑から見た青なので、**青－緑** とする。

計算する順番としては、**数直線上で数字が大きい方から小さい方へ並べるといいんじゃないか。**ｘなら右の数字から左の数字へ、ｙなら上の数字から下の数字へ並べると、引き算がしやすい。

X= (120/2 + 360) - (540/2 + 250)
X= -100

y= (690 - 70/2) - (870 - 480/2)
y= 25

なんか暗算と答えが違う。暗算は途中の式なんか残ってないから　どこで間違ったのか分からない。

しかしなんだか　ｘとｙで書き方が　なんか違うのが気持ち悪い。
そうか。

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702212141a5b1.png?raw=true)

Texture2D（上図赤枠）のX,Yは左下隅なのに、Rect（上図緑枠）のX,Yは左上隅なのか。
変なの……。

#検算
青枠の中心は、緑枠の中心から見て　本当に(X,Y) = (-100,25) なのか？

合ってるかどうか調べる方法を考えるのが大変なんだが、
例えば　**ずれている分を引けば、ずれていない**　状態になる。
つまり、中心が合わさるわけだ。

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702212141a6.png?raw=true)

いままで　緑枠と青枠の中心が　どれだけ　ずれているのか分からなかったので、計算した今　ずれを戻すという操作が可能になった。

つまり左上の角はこうなる。
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702212141a7.png?raw=true)

で、枠の横幅、縦幅は　今まで分かっていたわけだ。
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702212141a4c.png?raw=true)

縦に４１０、横に４２０　ずれているようだ。
これを　折り紙を半分に折るように　半分こすると　縦２０５　と　横２１０。

これが何のことを言っているかというと、
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702212141a6b.png?raw=true)
青枠と緑枠は　縦に２０５、横に２１０離れているよね、ということなんだが、じゃあ　右上角の距離も　そうなのかというと、

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-02/201702212141a8.png?raw=true)
そうなのかのようだ。

検算おわり。

#プログラムのコメントをどうするのか。
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画像の中心の相対座標を求める、とか日本語でコメントを書いていても　なんのことだか分からない。

なんだか　ぼんやり。