コード例 #1
0
    // Start is called before the first frame update
    void Start()
    {
        //importing section for Electromagnetic Effects
        cam                   = Camera.main;
        cameraMove2           = cam.GetComponent <cameraMove2>();
        cubeMove2             = this.GetComponent <cubeMove2>();
        cubeMove2pointcharge1 = GameObject.Find("Point_charge").GetComponent <cubeMove2>();
        cubeMove2pointcharge2 = GameObject.Find("Point_charge2").GetComponent <cubeMove2>();

        //Update the latest positions of Each point source
        pointchargeposworldframe3  = cubeMove2pointcharge1.objposworldframe3;
        pointcharge2posworldframe3 = cubeMove2pointcharge2.objposworldframe3;

        //Electric charge of the point source.
        q1 = 1.0f;
        q2 = 0.0f;
        m1 = 0.0f;
        m2 = 0.0f;
        //an Arrow's Position Vector mesured from Each point source in World frame
        Vector3 r = cubeMove2pointcharge1.Lobject * rR(cubeMove2.objposworldframe3, pointchargeposworldframe3);
        Vector3 R = cubeMove2pointcharge2.Lobject * rR(cubeMove2.objposworldframe3, pointcharge2posworldframe3);

        //Player's Position Vector mesured from Each point source in World frame
        Vector3 rp = cubeMove2pointcharge1.Lobject * rR(cameraMove2.playrposworldframe3, pointchargeposworldframe3);
        Vector3 Rp = cubeMove2pointcharge2.Lobject * rR(cameraMove2.playrposworldframe3, pointcharge2posworldframe3);

        //Creating Electromagnetic Tensor for an Arrow's position in world frame
        Matrix4x4 F1 = cubeMove2pointcharge1.Lobject.inverse * K(field(cubeMove2pointcharge1.Lobject * r, q1), field(cubeMove2pointcharge1.Lobject * r, m1)) * cubeMove2pointcharge1.Lobject.inverse;
        Matrix4x4 F2 = cubeMove2pointcharge2.Lobject.inverse * K(field(cubeMove2pointcharge1.Lobject * R, q2), field(cubeMove2pointcharge1.Lobject * R, m2)) * cubeMove2pointcharge2.Lobject.inverse;

        F = Sum(F1, F2);
        //Creating Electromagnetic Tensor for an Arrow's position in Player's rest frame
        Matrix4x4 f = cameraMove2.Lplayer * F * cameraMove2.Lplayer;

        efield = new Vector3(f.m03, f.m13, f.m23);
        this.transform.localScale = new Vector3(1, efield.magnitude / 20, 1);

        if (vp(efield, new Vector3(0, 0, 1)) == new Vector3(0, 0, 0))
        {
            Vector3 up1 = vp(efield, new Vector3(0, 1, 0));
            // 方向を、回転情報に変換
            Quaternion erotation = Quaternion.LookRotation(up1, efield);
            transform.rotation = erotation;
        }
        else
        {
            Vector3 up1 = vp(efield, new Vector3(0, 0, 1));
            // 方向を、回転情報に変換
            Quaternion erotation = Quaternion.LookRotation(up1, efield);
            transform.rotation = erotation;
        }

        //Creating Electromagnetic Tensor for Player's position in world frame
        Matrix4x4 G1 = cubeMove2pointcharge1.Lobject.inverse * K(field(cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * rp, q1), field(cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * rp, m1)) * cubeMove2pointcharge1.Lobject.inverse;
        Matrix4x4 G2 = cubeMove2pointcharge2.Lobject.inverse * K(field(cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * Rp, q2), field(cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * Rp, m2)) * cubeMove2pointcharge2.Lobject.inverse;

        G = Sum(G1, G2);
    }
コード例 #2
0
ファイル: cubeMove2.cs プロジェクト: Yasuda5160/sogebu_EMVR
 // Start is called before the first frame update
 void Start()
 {
     //importing ArrowDirection for Electromagnetic Effects
     player           = Camera.main;
     cameraMove2      = player.GetComponent <cameraMove2>();
     GeneralRelmetric = metric.GetComponent <GeneralRelmetric>();
     //
     playrposworldframe4 = cameraMove2.playrposworldframe4;
     playrposworldframe3 = playrposworldframe4;
     //
     objposworldframe3   = this.transform.position;
     objposworldframe4   = objposworldframe3;
     objposworldframe4.w = -(playrposworldframe3 - objposworldframe3).magnitude;
     //objvelworldframe3 =
     objvelworldframe4   = objvelworldframe3;
     objvelworldframe4.w = 1.0f;
     //objaccelworldframe3 =
     objaccelworldframe4   = objaccelworldframe3;
     objaccelworldframe4.w = 0.0f;
     //
     Lplayer = cameraMove2.Lplayer;
     Lobject = cameraMove2.LTrans(objvelworldframe3);
     //
     this.transform.position = Lplayer * objposworldframe4;
 }
コード例 #3
0
    // Update is called once per frame
    void Update()
    {
        //Update the latest positions of Each point source
        pointchargeposworldframe3  = cubeMove2pointcharge1.objposworldframe3;
        pointcharge2posworldframe3 = cubeMove2pointcharge2.objposworldframe3;

        //an Arrow's Position Vector mesured from Each point source in World frame
        Vector3 r = rR(cubeMove2.objposworldframe3, pointchargeposworldframe3);
        Vector3 R = rR(cubeMove2.objposworldframe3, pointcharge2posworldframe3);

        //Player's Position Vector mesured from Each point source in World frame
        Vector3 rp = rR(cameraMove2.playrposworldframe3, pointchargeposworldframe3);
        Vector3 Rp = rR(cameraMove2.playrposworldframe3, pointcharge2posworldframe3);

        //Creating Electromagnetic Tensor for an Arrow's position in world frame
        Matrix4x4 F1 = cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * K(field(cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * r, q1), field(cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * r, 0)) * cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3).inverse;
        Matrix4x4 F2 = cameraMove2.LTrans(cubeMove2pointcharge2.objvelworldframe3) * K(field(cameraMove2.LTrans(cubeMove2pointcharge2.objvelworldframe3) * R, q2), field(cameraMove2.LTrans(cubeMove2pointcharge2.objvelworldframe3) * R, 0)) * cameraMove2.LTrans(cubeMove2pointcharge2.objvelworldframe3).inverse;

        F = Sum(F1, F2);
        //Creating Electromagnetic Tensor for an Arrow's position in Player's rest frame
        Matrix4x4 f = cameraMove2.Lplayer.inverse * F * cameraMove2.Lplayer;

        efield = new Vector3(f.m03, f.m13, f.m23);
        bfield = new Vector3(f.m12, f.m20, f.m01);
        this.transform.localScale = new Vector3(1, efield.magnitude / 10, 1);

        if (vp(efield, new Vector3(0, 0, 1)) == new Vector3(0, 0, 0))
        {
            Vector3 up1 = vp(efield, new Vector3(0, 1, 0));
            // 方向を、回転情報に変換
            Quaternion erotation = Quaternion.LookRotation(up1, efield);
            transform.rotation = erotation;
        }
        else
        {
            Vector3 up1 = vp(efield, new Vector3(0, 0, 1));
            // 方向を、回転情報に変換
            Quaternion erotation = Quaternion.LookRotation(up1, efield);
            transform.rotation = erotation;
        }

        //Creating Electromagnetic Tensor for Player's position in world frame
        Matrix4x4 G1 = cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * K(field(cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * rp, q1), field(cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3) * rp, 0)) * cameraMove2.LTrans(cubeMove2pointcharge1.objvelworldframe3).inverse;
        Matrix4x4 G2 = cameraMove2.LTrans(cubeMove2pointcharge2.objvelworldframe3) * K(field(cameraMove2.LTrans(cubeMove2pointcharge2.objvelworldframe3) * Rp, q2), field(cameraMove2.LTrans(cubeMove2pointcharge2.objvelworldframe3) * Rp, 0)) * cameraMove2.LTrans(cubeMove2pointcharge2.objvelworldframe3).inverse;

        G = Sum(G1, G2);
    }
コード例 #4
0
ファイル: cubeMove2.cs プロジェクト: Yasuda5160/sogebu_EMVR
 // Update is called once per frame
 void Update()
 {
     Lplayer                 = cameraMove2.Lplayer;
     objvelworldframe3      += objaccelworldframe3 * Time.deltaTime;
     objvelworldframe4       = objvelworldframe3;
     objvelworldframe4.w     = Mathf.Sqrt(1f + objvelworldframe3.sqrMagnitude);
     objposworldframe4      += objvelworldframe4 * Time.deltaTime;
     Lobject                 = cameraMove2.LTrans(objvelworldframe3);
     this.transform.position = Lplayer * objposworldframe4;
 }