[Unity]定常波の作り方[高校物理]

この記事は約5分で読めます。

下の記事をまだ読んでいない場合は、一度目を通してくださいね!

波の重ね合わせ

2つの波が重ね合わさったときに現れる波の形は、それぞれの波の変位を足し合わせたものとなります。これを波の重ね合わせの原理といいます。波が重ね合わさってできた波を合成波と言います。

合成波の変位yは、波1による変位y1と、波2による変位y2の単純な和となります。

$$y=y_1+y_2$$

ということです。

定常波とは

波長、振幅、周期の等しい2つの正弦波が、お互いに逆向きに進むとき、その2つの波が重なり合ったときの合成波を定常波とよびます。

ここで、発生させる2つの正弦波に対する仮定を示します

正弦波1の仮定

時刻\(t=0\)に、位置\(x=x_{01}\)から生じる右向きに進む波

この正弦波1による位置\(x\)での変位\(y_1\)は

$$y_1=\sin 2 \pi f\left( t-\frac{x-x_{01}}{v} \right)$$と表すことができます。

正弦波2の仮定

時刻\(t=0\)に、位置\(x=x_{02}\)から生じる左向きに進む波

この正弦波2による位置\(x\)での変位\(y_2\)は

$$y_2=\sin 2 \pi f\left( t+\frac{x-x_{02}}{v} \right)$$と表すことができます。

ですので、この2つの波の重ね合わせによってできる合成波(定常波)の変位yは

$$y=\sin 2 \pi f\left( t-\frac{x-x_{01}}{v} \right)+\sin 2 \pi f\left( t+\frac{x-x_{02}}{v} \right)$$となります!

再生する

このように、重なり合う2つの波は、まるで進むことなく、その場に留まったような振る舞いをします。だから、定常波とよばれるんですね。

定常波の特徴としての、腹と節も観察することができます。

定常波のC#スクリプト

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StandingWave : MonoBehaviour
{
    public float amp = 4.0f;
    public float fre = 0.25f;
    public float spd = 5.0f;
    public float x_01 = 0.0f; //正弦波1の波源の位置
    public float x_02 = 25.0f;//正弦波2の波源の位置
    private float PI = Mathf.PI ;
    Transform myTransform;

    void Awake()
    {
        myTransform = this.transform;
    }


    
    void FixedUpdate()
    {
        float x = myTransform.position.x;
        float z = myTransform.position.z;
    
        float Dis1 = x - x_01;
        float Dis2 = x - x_02;
        float height1;
        float height2;
//--------------はじめに媒質を静止させておき、波が到達したら動き出すようにする----------
        if (Dis1 <= spd * Time.time)
        {
           height1 = amp * Mathf.Sin(2.0f * PI * fre * (Time.time - (Dis1 / spd)));
        }
        else
        {
            height1 = 0.0f ;
        }
        if (Dis2 >= -1.0f*spd * Time.time)
        {
            height2 = amp * Mathf.Sin(2.0f * PI * fre * (Time.time + (Dis2 / spd)));
        }
        else
        {
            height2 = 0.0f ;
        }
//----------------------------------------------------------------------------
        
//--------------------波の重ね合わせ---------------------
     float height = height1+ height2;
//-----------------------------------------------------
        myTransform.position = new Vector3(x, height, z);

         


    }
}

以上です!ありがとうございました。

また、3次元の波にも挑戦してみます。

勉強させてもらってます!楽しい!

コメント

タイトルとURLをコピーしました