UVを作成していると、こんなUVを目撃する機会がありませんか?
この傾いたUVを、水平、垂直にしたい!っと思うことはあると思いますが、、、
Mayaだけのオペレーションでは、Rotateで頑張って、水平・垂直っぽくすると思いますが、厳密に見ればビミョーに傾いた状態で妥協することになってしまいます、、、(;´∀`)
この傾きを数値的にバシっと水平・垂直にする方法をご紹介したいと、思います!
計算の考え方
冒頭のUVを、手動で水平・垂直にしようと思うと以下の赤いラインを意識すると思います。
この赤いラインに補助線を付け加えると、、、
なんだか、数学の香りがしてきましたね(;´∀`) 更に書き足していくと、、、
「直角三角形」の登場します!下記の緑色の部分の角度が分かれば、このUVを水平・垂直にできそうですね(*´ω`*)
「直角三角形」っということは、、、高校生で習ったsin・cos・tanの「三角関数」を使えば、この角度を求められそうですね!(゚∀゚)
三角関数
先程の画像に三角関数に当てはめて見ると、このようになります。
三角関数の値から、角度を求めるの「逆三角関数」を使えば簡単に、θが求められそうですね!「アークサイン」「アークコサイン」「アークタンジェント」ってやつですね(*´ω`*)
プログラムでは「アーク(arc)」を「a」と略して「asin」「acos」「atan」っと略される事が多いです。
ただ、UVの傾きを治すためには「sinだけ」「cosだけ」では成立しません。っというのも、、、
角度θを360°ちゃんと求めるためには、「sin」「cos」の両方の値が必要です(`・ω・´)ゞ っということは、「atan(アークタンジェント)」を使えば良さそうですね(゚∀゚)
しかし!そう簡単には行きません。tanの公式は「sin ÷ cos」ですが、cosが0の場合プログラムは大概エラーしてしまいます。「1÷0」っておかしいですよね、、、色々条件分岐が必要になってくるわけです、、、(´;ω;`)
そこで登場するのが「atan2」です!「atan」はtanを指定して角度を求めるのに対して、「atan2」はXとYを指定して角度を求められます。乱暴に言えば、あれこれ計算してもらって角度をゲット!という美味しいものです(*´ω`*)b
プログラムを書く時は、「atan2」を使って行くことにしましょう!
赤い線を求める
冒頭では補助線を入れて、三角形を作り角度を求める流れできましたが、赤い線をどう求めるかも考えなくては行けません。
これを求めるには、「赤線の始点と終点の座標」を使って「2つの点のベクトル」を計算すればOKですね(゚∀゚)
先程の画像に当てはめてみると、以下のようになります。
「2つの点のベクトル」を求めるには、2つの点A(a1、a2)と、B(b1、b2)とすると「(b1 – a1, b2 – a2)」っとなりますね!終点から始点に向けて計算しないとダメですよ!
次回は、この考え方を元にPythonでプログラムを作り、UVの傾きを治すツールをご紹介したいと思います!
この記事がイイネ!っと思ったら、ぜひSNSで拡散お願い致します!