LoginSignup
3
3

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-02-21

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

今回のお話

Gazo
画像の位置は全部 中心座標でいいじゃないか。

始まる

Gazo

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

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

Gazo

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

Gazo

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

ちなみに 将棋盤の座標の方向は こう。
Gazo
右縦書きだ。将棋盤を見た後にチェス盤を見ると 嫌がらせで反対にしてあるのかと思ってしまうが 流行った地方での普通の座標の振り方なのだろう。

で、今まで 左上を原点 とするテキストエディターのような座標でやってきたので
Gazo
こういうやつだが、既存のコードを Unityに写して何か動かないと思ったんだが 萎えている。

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

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

ここで、2つの Rectangle が分かっているものとする。
Gazo
数字は適当に今決めた。暗算すると x=-100、y=-15 なんじゃないかと思うんだが その計算の途中を解説しよう。

Gazo
ここで 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で書き方が なんか違うのが気持ち悪い。
そうか。

Gazo

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

検算

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

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

Gazo

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

つまり左上の角はこうなる。
Gazo

で、枠の横幅、縦幅は 今まで分かっていたわけだ。
Gazo

縦に410、横に420 ずれているようだ。
これを 折り紙を半分に折るように 半分こすると 縦205 と 横210。

これが何のことを言っているかというと、
Gazo
青枠と緑枠は 縦に205、横に210離れているよね、ということなんだが、じゃあ 右上角の距離も そうなのかというと、

Gazo
そうなのかのようだ。

検算おわり。

プログラムのコメントをどうするのか。

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

なんだか ぼんやり。

3
3
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3