UVの傾きを計算して水平・垂直にする!! part1

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で拡散お願い致します!