1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

数学弱者が波に挑戦してみる③

Last updated at Posted at 2024-12-04

はじめに

上記の続きになります!

今回はトロコイド曲線でハイトマップを生成するところから。

数学のお時間

さあやってまいりました!数学弱者には苦痛でしかないお時間が!

前回少しトロコイド曲線、もといサイクロイド曲線についてお勉強したんですが、
トロコイド曲線といっても様々なものがあるので
今回は限りなく波に近いトロコイド曲線を作っていこうと思います!

トロコイド曲線

x=周期
y=波の高さ
a=円の半径
b=円の中心から軌道を描く点までの距離
θ=円が転がった角度

x=aθ−bsinθ
𝑦=𝑎−𝑏cos𝜃

*a=1,b=1のグラフ
トロコイド.png

まあ、確かにこのままだと波ではない。

y軸を反転

ので、y軸を反転させる

x=aθ−bsinθ
𝑦=-(𝑎−𝑏cos𝜃)

Y軸反転トロコイド.png

おお、これだけでもだいぶ波。

正の数に

で、これをより扱いやすくするために曲線全体がピタッと正の数になるように
y=0からy=曲線上の最も低い場所(例えばθが180゚である場所)までの距離を足す

x=aθ−bsinθ
𝑦=-(𝑎−𝑏cos𝜃) + (𝑎−𝑏cos180゚)

y=b(cos𝜃+1)

高さ変更トロコイド.png

bを振幅として扱いたい

現段階でyの取りうる値の範囲
cos𝜃の取りうる範囲が-1~1なので
b(-1+1)~b(1+1) つまり
0~2bである
これを b を波の振幅として扱いたいらしいので
y=b(cos𝜃+1)-b

y=bcos𝜃
となる。

振幅トロコイド.png

一旦ここでまとめ

いらない工程があったような気もしたんですが、結論
"波の高さ=振幅cosθ"

円の半径aと円の中心から軌道を描く点までの距離bの関係

今まで a = bでの話をしてきたんですが
この2つの値の関係値によって波の形が異なってきます。

トロコイド曲線.gif

波だなって感じられるのはa>bのとき
(今回はb >= 0とする)

aとbをパラメータによって算出したい

x=aθ−bsinθ
y=bcos𝜃

今のところ波の式は上記のようになっているんですが
最終的には具体的なパラメータによって算出できるようにしたい
例:波長と波の尖り度合とかを渡したらその波が作り出せる

ってわけで、次にやることは参考サイトによれば
bをaの割合で表したいということで

R = aに対する割合(0~1の値をとる尖り係数)
b = aR

とする

次にaとbをこの尖り係数Rと波長Lという
2つのパラメータを使って表す

a = L/2π
b = R・L/2π

ただ、ここで仮に
Lを2、Rを1、θをπとした時に

波長はそのまま2
最大の波高が2b=2/π≒0.636

つまり
波長:最大の波高 = 1:0.318

となるんですが、前々回波について調べた結果
現実の波は大体
波長:最大の波高 = 1:0.142
ってことがわかっています。
そう、現段階の式だと割合がリアルじゃないんです。

なので
b = R・L/2π/2

b = R・L/4π

とすると大体それっぽい割合になる

整理すると

x=(L/2π)θ−(R・L/4π)sinθ
y=(R・L/4π)cos𝜃

位相

動かない波であれば

x=(L/2π)θ−(R・L/4π)sinθ
y=(R・L/4π)cos𝜃

でいいんですが、
動かしたい場合はxに移動距離を足さないといけません

移動距離は速度×時間

時間はtで表せばいいんですが
速度がちょっとわかりづらくて
v = √(L/2π・g)

Lが波長、gが重力です
理解は後にして
とりあえず最終の式を出す

x=(L/2π)θ−(R・L/4π)sinθ+√(L/2π・g)・t
y=(R・L/4π)cos𝜃

長い!!!!!!!!!

実装

さあ実装してみよう!
と、行きたいところなんですが。

x=(L/2π)θ−(R・L/4π)sinθ+√(L/2π・g)・t
y=(R・L/4π)cos𝜃

これは媒介変数表示であり、
xとyの値は互いに直接的に干渉しません。

つまり、時間がどう進もうが波の高さが変化しないんです。

しかも、媒介変数であるθをxで表すこともできないらしいので
ほんとにお手上げ。

え。どうしたらいいの?

で、一応解決策的なものはあるらしくて
それが
θをニュートン法で探索する

いや知らん。ニュートン法ってなんぞ。

疲れたので今日はここまで。
本当は適用+頂点シェーダも使いたかったんですが、
思ったより理解に時間がかかってしまった...

次回はニュートン法を理解するところから始まる気がする
ってかなんか元々の目標から離れていってる気がするけど大丈夫なんだろうか

小話:有義波

波には尖りがあるという話を前回したんですが、
その「人間が尖っていると感じる波」は有義波ってのに含まれているらしい。

有義波とは、目に入った波全体のうち、1/3ぐらいの割合で含まれる
 「人が目で見て動いているなと認識できる波」です。らしいです。
 残りの2/3は小さすぎてどう動いているのか認識できないとのこと。

まあ、簡単に言えば
波の構成は 大きい波:小さい波 = 1 : 2 ってこと「らしい」

開発環境
IDE:VisualStudio2022
使用言語:c/c++
使用ライブラリ:DirectXTex,DirectXMath etc.

関数グラフ作成サイト様
https://www.geogebra.org/graphing?lang=ja

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?