サンプルプログラム​/三角関数プレーヤー_for_Unity

Unity学習帳2冊目サンプルプログラム / 三角関数プレーヤー_for_Unity

三角関数プレーヤー_for_Unity anchor.png

簡単な三角関数が理解できるサンプルプログラムを作ってみました
以下のURLよりUnityWebPlayerにてプレイできます

&link(三角関数プレーヤー_for_Unity){https://dl.dropboxusercontent.com/u/87271864/Math_sincosCurve/Math_sincosCurve.html}

GitHubにてソースコードを公開しました
一応、扱いはフリーライセンスです

&link(Osinko/SinCosGraph · GitHub){https://github.com/Osinko/SinCosGraph}

Page Top

Sinθの微分を求めてみて分る事 anchor.png

f(θ)=sin(θ)として微分する際、式の途中でsin(θ+Δθ)するが、この部分の計算は単純な計算ではうまく行かない

その原因は関数にあると考えられる
f(x-Δx)が正しく計算できる「その関数が持つ加法定理」を明確にしなければ、その関数に対する微分は出来ない

たとえばsin、cosの三角関数の場合、sin(θ+Δθ)をsin(a+b)として

  • sin(a+b) = sin(a)cos(b)+cos(a)sin(b)
  • sin(a-b) = sin(a)cos(b)-cos(a)sin(b)
  • cos(a+b) = cos(a)cos(b)-sin(a)sin(b)
  • cos(a-b) = cos(a)cos(b)+sin(a)sin(b)

という基本的な定理が単位円内の二つの直角三角形の相似関係から導ける
ここから式の足し算による変形で

  • sin(a)cos(b) = 1/2{sin(a+b)+sin(a-b)}
  • cos(a)sin(b) = 1/2{sin(a+b)-sin(a-b)}
  • cos(a)cos(b) = 1/2{cos(a+b)+cos(a-b)}
  • sin(a)sin(b) = -1/2{cos(a+b)-cos(a-b)}

という式が作れる。ここからさらにsin(a+b)-sin(a-b)をsinA-sinBとして考えると...

(以下省略)

Page Top

三角関数サンプルプログラム解説 anchor.png

一応ソースコードの解説をするとScripts/baseフォルダ内のスクリプトがグラフ描画用の汎用性を持たせたつもりのベクターメッシュ用ライブラリです。シーンに配置したGameObjectとしての個々のライン描画(VectorMesh)をunityのParticleSystem的にDictionaryクラスで辞書管理させています。ユーザーはこの辞書を使ってシーン内のベクターメッシュオブジェクトを一元管理できます(ベクターメッシュはゲームオブジェクトなので、ゲームオブジェクトとして消したりも出来ますが、そういう使い方を想定したつくりにしていません。削除には辞書クラスを経由して行うのが想定している使い方です。それによりパーティクルのライフタイムのような機能や一時的な非表示機能なども正常に運用できるようになります)。Scripts/meshLib/内のコードが個々のメッシュの作画用コードです。たとえばラインや円、グリッドなどを具体的に作画するコードです。Scripts / userLib / 内はVectorMeshクラスを継承したカスタム化された描画オブジェクトのクラスを作成しています。これは今回サインコサインカーブの逐次変化するリアルタイム描画をするベクターメッシュの仕様を担当させています。ここにあるコードのようにVectorMeshクラス継承すると様々なベクター描画が可能となるようなならないような感じです(汗)。正直使い易い形になってるとは思えないので、後々この辺りの仕様等は他のプログラムなどで改良していく予定は未定

とりあえず数学的に色々な作画が可能になってきたので何か数学を使って面白い表現が出来るコードを今後も書いてみるつもりです


添付ファイル:

トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Last-modified: 2015-03-25 (水) 11:31:00 (JST) (3321d) by osinko