« 高周波・RFニュース 2025年2月12日 GSAが5G standaloneウェビナー開催、CTIAと5G americasがケーブルに対抗してSpectrum for Broadband Competitionで連携、NXPがエッジAIのKinaraを買収、PBKreviewsがSamsung Galaxy S25/plus/ultra全部分解していて5Gミリ波AiPは全部1個 | トップページ | 高周波・RFニュース 2025年2月13日 iFixitがSamsung Galaxy S25 ultraを分解、ぐりぐり回せる3D CTモデルに、Spirentの5G Outlook レポート、QualcommのオンデバイスAIホワイトペーパー、InfineonがCoolSiC™ MOSFETs 650 Vの Q-DPAKとTOLLパッケージで発表 »

2025年2月12日 (水)

UnityでVisual C#用の数値計算ライブラリMath.NET Numericsを使う(番外編) ピタゴラスの三体問題をPythonのルンゲクッタ8次の適応刻み幅を持つDOP853でデータを作ってCSVファイルにし、Unityでボールの軌跡を描きながら3Dで動かす。カメラも回転させる。

今回はピタゴラスの三体問題。これは刻み幅を自動で変えて精度を出すようなルンゲクッタ法じゃないと無茶苦茶になる。残念ながらMath.NET Numericsは普通の4段4次のルンゲクッタ法しかないのでダメ…

じゃあPythonで計算してCSVファイルを読み込むか、ということでやってみる。Pythonについてはこちら。

 Python+Scipyでルンゲクッタ8次のDOP853(Dormand Prince)を使う(その5) ピタゴラスの三体問題を計算する。rtolとatolを設定しないと無茶苦茶になる。

UnityでCSVファイルを読み込むのはこちらを参考にしました。

https://note.com/macgyverthink/n/n83943f3bad60

コードはこんな感じ。ただCSV読んで、ボール3つの座標に割り当てているだけ。


using UnityEngine;
using System;
using System.Collections.Generic;
using System.IO;
using UnityEngine.Rendering;

public class CsvReader : MonoBehaviour
{
    List<float> x1 = new List<float>();
    List<float> x2 = new List<float>();
    List<float> x3 = new List<float>();
    List<float> y1 = new List<float>();
    List<float> y2 = new List<float>();
    List<float> y3 = new List<float>();
    int n;
    int count;
    GameObject Ball1;
    GameObject Ball2;
    GameObject Ball3;

    // Start is called once before the first execution of Update after the MonoBehaviour is created
    void Start()
    {
        TextAsset csvFile;
        List<string[]> csvDatas = new List<string[]>(); csvFile = Resources.Load("3body") as TextAsset; // Resouces下のCSV読み込み
        StringReader reader = new StringReader(csvFile.text);

        Ball1 = GameObject.Find("Ball1");
        Ball2 = GameObject.Find("Ball2");
        Ball3 = GameObject.Find("Ball3");

        while (reader.Peek() != -1)
        {
            string line = reader.ReadLine();
            csvDatas.Add(line.Split(','));
        }

        n = csvDatas.Count;
        count = 0;
        for (int i = 0; i < n; i++)
        {
            x1.Add(Convert.ToSingle(csvDatas[i][0]));
            y1.Add(Convert.ToSingle(csvDatas[i][2]));
            x2.Add(Convert.ToSingle(csvDatas[i][4]));
            y2.Add(Convert.ToSingle(csvDatas[i][6]));
            x3.Add(Convert.ToSingle(csvDatas[i][8]));
            y3.Add(Convert.ToSingle(csvDatas[i][10]));

        }

    }

   
    // Update is called once per frame
    void Update()
    {
        if (count > n)
        {
            count = 0;
        }
        Ball1.transform.position = new Vector3(x1[count], y1[count], 0f);
        Ball2.transform.position = new Vector3(x2[count], y2[count], 0f);
        Ball3.transform.position = new Vector3(x3[count], y3[count], 0f);
        count++;
    }
}

結果の動画はこちら。

カメラを回してみた。

 

なかなかかっこいい動きをしている。次回からはまたMath.NET Numericsに戻る予定。

« 高周波・RFニュース 2025年2月12日 GSAが5G standaloneウェビナー開催、CTIAと5G americasがケーブルに対抗してSpectrum for Broadband Competitionで連携、NXPがエッジAIのKinaraを買収、PBKreviewsがSamsung Galaxy S25/plus/ultra全部分解していて5Gミリ波AiPは全部1個 | トップページ | 高周波・RFニュース 2025年2月13日 iFixitがSamsung Galaxy S25 ultraを分解、ぐりぐり回せる3D CTモデルに、Spirentの5G Outlook レポート、QualcommのオンデバイスAIホワイトペーパー、InfineonがCoolSiC™ MOSFETs 650 Vの Q-DPAKとTOLLパッケージで発表 »

パソコン・インターネット」カテゴリの記事

学問・資格」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« 高周波・RFニュース 2025年2月12日 GSAが5G standaloneウェビナー開催、CTIAと5G americasがケーブルに対抗してSpectrum for Broadband Competitionで連携、NXPがエッジAIのKinaraを買収、PBKreviewsがSamsung Galaxy S25/plus/ultra全部分解していて5Gミリ波AiPは全部1個 | トップページ | 高周波・RFニュース 2025年2月13日 iFixitがSamsung Galaxy S25 ultraを分解、ぐりぐり回せる3D CTモデルに、Spirentの5G Outlook レポート、QualcommのオンデバイスAIホワイトペーパー、InfineonがCoolSiC™ MOSFETs 650 Vの Q-DPAKとTOLLパッケージで発表 »

最近の記事

2025年3月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

最近のコメント

無料ブログはココログ
フォト