【Shaderプログラミング】雪を降らせる手法について Part.4
年度跨ぐ際にいろいろ大変でした。
年度末に急に振られた、ノベルゲーム勉強会。
まったく、経験が無いのに教えろと言う無茶振りw
何とか乗り越えました。
(その方、よくプログラミング出来るみたいでしたよ。)
終わったことは、どうでもいいとして・・・
内積の説明に入りましょう。
心身ともにボロボロなパンダですクマーーーーーー。。。
(猫熊なので、語尾がクマでも間違いではないのだw)
前回のおさらい
前回は、ベクトルの足し算を図で表現することで、イメージしやすく表現してみました。
ベクトルの足し算は、量の総和です。
方向も合わせて考えることが、重要なんですよ。
【Shaderプログラミング】雪を降らせる手法について Part.3 - VR 研究記
では、ベクトルの内積に入ろうと思います。
まずは、内積を証明する前に必要な余弦定理の証明を示します。
懐かしいと思いますが、定義は以下の通りです。
パンダでも分かる余弦定理
余弦定理とは、直角三角形ではない三角形からある角度θ挟む線分の終点通しを結んだとき、その線分の長さを求める式のことです。
実際に何に使うのやら、まったく用途の分からない式ですが、まぁ通過点と思って見てくだせぇ。
点Oを原点にして、角θを挟んで広がる線分OAと線分OBがあります。
線分OA,線分OBの長さは、それぞれb, cと定義します。
線分ABの長さaを求めるために順番に解説します。
まず、点Aから線分OBに向かって垂直なる線を引き線分OBとの交点をHとします。
線分AHの長さと線分HBの長さが分かれば、が出ることは分かりますよね。
じゃあ、線分AHの長さを算出してみましょう。
下の絵の通り、三角形OAHを出してみました。
ここで、分かっているのは、線分OAの長さbと角θのみです。
角θを使ってを計算してみましょう。
次に、線分HBの長さを算出したいけど、このままでは算出できないね。
線分OBの長さがcだと分かっているので、全体から、|OH|を引けば出せるかもしれないよ。
ってことで、線分|OH|を算出します。
線分OAの長さbとが分かるので、を使って以下のように表現します。
最終的に求めたいのは、線分HBの長さで線分OBの長さはcであるから、
最終的な目的は、線分ABの長さaを求めることなので、三角関数の定理より
それぞれ、算出した長さを代入すると、こうなります。
これを展開して、
より
となる。
前出の定理になりました。
この知識を踏まえて、ベクトルの内積とは何かを解剖しましょう。
パンダの内積 (パンダ関係ないぞw)
いよいよ本題の内積です。
これを通してイメージ掴んでくださいな
ベクトルの内積ってがあるとするとになるよって習いましたよね?
だから、それ何に使うの?どういう意味なの?って突込みには一切触れずに、式だけ覚えましたよね?
んじゃ、今回はそれを解き明かしましょう。
まず、ではない、を用意します。
この三角形は、どこかで見ましたね?
そう、余弦定理です。
余弦定理とtの関係から内積とは『何か』を見たいと思います。
三角形OABについて、余弦定理を見てみましょう。
(0≦≦180)
ここで、と定義して余弦定理に代入してみましょう。
となる。
成分で見ると、内積
まとめ
結局、内積の正体は数式でのみでしか表現できそうに無い。
ただし、数式の関係からベクトルから、を求めて、角度の算出等に役立ちそうだというのは理解できると思う。
では、次回は【内積】を使って、シェーダープログラミングを書いてみることにしよう。
Let's try it.
シリーズ一覧:
【Shaderプログラミング】雪を降らせる手法について Part.1 - VR 研究記
【Shaderプログラミング】雪を降らせる手法について Part.2 - VR 研究記
【Shaderプログラミング】雪を降らせる手法について Part.3 - VR 研究記