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パッケージで発表 »
「パソコン・インターネット」カテゴリの記事
- Interface2025年8月号Pythonで体験!はじめての暗号を買った。上杉暗号からRSA、AES、DHなど、特に楕円曲線暗号についてはコードも実際に動かすところまで詳しくかかれていた。耐量子暗号や聞いたことなかったY-00暗号や関数型暗号も記載。(2025.07.10)
- Gemini CLIが使えるようになっていたので早速VSCodeのターミナルから使って、JavaScriptで連立一次方程式を計算するコードを書いてもらった。普通にガウスの消去法で計算するhtmlを作ってくれた。(2025.06.27)
- Google ColabのJulia言語で1次元のGray-Scottモデル(∂u/∂t=u²v-(F+k)u+Du∂²u/∂x²,∂v/∂t=-u²v+F(1-v)+Dv∂²v/∂x²)を計算してパルスが次々分裂する様子を見る。空間6次の差分、時間8次のルンゲクッタ法で計算。(2025.07.08)
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2025年7月13日 Pythonの高周波ライブラリscikit-rfがv1.8.0に、SamsungがGalaxy Z Fold7など発表→QualcommがSnapdragon 8 Eliteが使われていると発表、NGMNが基地局アンテナの推奨事項をまとめる、STMicroとMetalenzがメタサーフェス光学のライセンス締結(2025.07.14)
- Interface2025年8月号Pythonで体験!はじめての暗号を買った。上杉暗号からRSA、AES、DHなど、特に楕円曲線暗号についてはコードも実際に動かすところまで詳しくかかれていた。耐量子暗号や聞いたことなかったY-00暗号や関数型暗号も記載。(2025.07.10)
- 高周波・RFニュース 2025年7月8日 NordicとSercommのセルラーIoTモジュール、iFixitがFairphone 6を分解、スコアは10/10、RCR wireless newsのウェビナー2件(6GとIndustry4.0)、SEMCOが高耐圧C0G MLCCを車載急速充電に提案(2025.07.09)
- 高周波・RFニュース 2025年7月2日 5G Americasが6Gに向けセンシングと通信ホワイトペーパー発行、KYOCERA AVXが3dBハイブリッドカプラ発表、TDKが車載薄膜インダクタ発表、Nordicが1次電池向けPMIC発表、ローデ・シュワルツの6GとAI/ML解説記事(2025.07.02)
- 高周波・RFニュース 2025年6月30日 QualcommがAIを用いた6Rxアンテナ解説、Next G Allianceと日本のXGMFが5G,6Gで協力、5G Americasが25Q1で5G加入者増加と発表、TechInsigtsがHuawei Pura 80 Pro+分解、Qorvoが5-7GHzのWi-Fi 7 FEM発表(2025.06.30)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2025年7月13日 Pythonの高周波ライブラリscikit-rfがv1.8.0に、SamsungがGalaxy Z Fold7など発表→QualcommがSnapdragon 8 Eliteが使われていると発表、NGMNが基地局アンテナの推奨事項をまとめる、STMicroとMetalenzがメタサーフェス光学のライセンス締結(2025.07.14)
- 高周波・RFニュース 2025年7月8日 NordicとSercommのセルラーIoTモジュール、iFixitがFairphone 6を分解、スコアは10/10、RCR wireless newsのウェビナー2件(6GとIndustry4.0)、SEMCOが高耐圧C0G MLCCを車載急速充電に提案(2025.07.09)
- 高周波・RFニュース 2025年7月2日 5G Americasが6Gに向けセンシングと通信ホワイトペーパー発行、KYOCERA AVXが3dBハイブリッドカプラ発表、TDKが車載薄膜インダクタ発表、Nordicが1次電池向けPMIC発表、ローデ・シュワルツの6GとAI/ML解説記事(2025.07.02)
- 高周波・RFニュース 2025年6月30日 QualcommがAIを用いた6Rxアンテナ解説、Next G Allianceと日本のXGMFが5G,6Gで協力、5G Americasが25Q1で5G加入者増加と発表、TechInsigtsがHuawei Pura 80 Pro+分解、Qorvoが5-7GHzのWi-Fi 7 FEM発表(2025.06.30)
- 高周波・RFニュース 2025年6月27日 Qualcommが6Gに向けての3GPPリリース20解説、TDKが100V1608サイズ1μFのMLCCを発表、Skyworksが低ジッタのクロックファミリーを発表、Elisa,Ericsson,MediaTekが5G SAで8Gbpsを達成(2025.06.27)
« 高周波・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パッケージで発表 »
コメント