UnityでVisual C#用の数値計算ライブラリMath.NET numericsを使う(4) 高速フーリエ変換(FFT)をしながらそのグラフを3D空間で動かす。
さて今回はFFT編。
を基にやってみる。ただ画面に表示するだけでは面白くない。せっかくUnity使っているのでそのグラフを動かしてみよう。
UnityはObjectはものすごく簡単に動かせるが、今回使うLineRendererはだめらしい…では泥臭いがアップデートするたびに計算し直す。
フレーム内で計算が終わるかの確認にもなる。メインカメラの方もちょっと回してます。
コードはこんな感じで。
using MathNet.Numerics.IntegralTransforms;
using System.Numerics;
using System;
using UnityEngine;
using Vector3 = UnityEngine.Vector3;
public class MathNET04 : MonoBehaviour
{
LineRenderer realLine;
LineRenderer imagLine;
int n;
float z, span, delta;
void Start()
{
// 実部用
GameObject RealObject = GameObject.Find("RealLine");
realLine = RealObject.GetComponent<LineRenderer>();
// 虚部用
GameObject ImagObject= GameObject.Find("ImagLine");
imagLine = ImagObject.GetComponent<LineRenderer>();
n = 256;
z = 0;
span =0.1f;
delta = 0;
realLine.positionCount = n;
realLine.widthMultiplier = 0.02f;
realLine.startColor = Color.blue;
realLine.endColor = Color.blue;
imagLine.positionCount = n;
imagLine.widthMultiplier = 0.02f;
imagLine.startColor = Color.red;
imagLine.endColor = Color.red;
}
private void Update()
{
delta += Time.deltaTime;
if (delta > span)
{
Vector3[] realPoints = new Vector3[n];
Vector3[] imagPoints = new Vector3[n];
double[] t = new double[n];
Complex[] y = new Complex[n];
Complex imag = Complex.ImaginaryOne;
for (int i = 0; i < t.Length; i++)
{
t[i] = Convert.ToDouble(i);
y[i] = Math.Sin(t[i]);
}
Fourier.Forward(y, FourierOptions.Matlab);
double[] freq = Fourier.FrequencyScale(256, 1.0);
for (int i = 0; i < freq.Length; i++)
{
realPoints[i] = new Vector3((float)freq[i], (float)y[i].Real / 200f, MathF.Sin(z));
imagPoints[i] = new Vector3((float)freq[i], (float)y[i].Imaginary / 200f, MathF.Sin(z));
}
realLine.SetPositions(realPoints);
imagLine.SetPositions(imagPoints);
z += 0.1f;
if (z >= MathF.PI) z = 0f;
delta = 0;
}
}
}
|
実行結果:
静止画
動画
なかなかシュール。では次行ってみよう(続く)。
« パンダエクスプレス りんくうプレミアムアウトレット店でビッグプレート(オレンジチキン、クンパオチキン、モンゴリアンポーク)をいただく。アメリカに住んでいた時、オレンジチキンにハマって月2くらいで通っていた。 | トップページ | UnityでVisual C#用の数値計算ライブラリMath.NET Numericsを使う(5) ルンゲクッタ法でローレンツ方程式を計算して、その軌道通りに球を3D画面で動かし、そこに軌跡が残るようにする。さらにカメラも回転させる。 »
「パソコン・インターネット」カテゴリの記事
「学問・資格」カテゴリの記事
- 高周波・RFニュース 2025年6月12日 QorvoがKバンド衛星通信向けパワーアンプ発表、QuectelがWi-SUNモジュール発表、Kymetaがマルチバンドアンテナ発表、iFixitがAppleがiPadの修理は悪夢と認めたと語る、中国の6G戦略解説、iFixitがNintendo Switch2のチップ同定(2025.06.12)
- 高周波・RFニュース 2025年6月11日 Siversの28GHzモジュールがaiRadarに採用、LG Innotekが車載5G衛星通信モジュール発表、Nuvotronicsがフィルタ設計のためのStrataWorksプラットフォーム発表、TechInsigtsのXiaomi 15S Pro分解、QualcommがAlphawave Semi買収(2025.06.11)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2025年6月12日 QorvoがKバンド衛星通信向けパワーアンプ発表、QuectelがWi-SUNモジュール発表、Kymetaがマルチバンドアンテナ発表、iFixitがAppleがiPadの修理は悪夢と認めたと語る、中国の6G戦略解説、iFixitがNintendo Switch2のチップ同定(2025.06.12)
- 高周波・RFニュース 2025年6月11日 Siversの28GHzモジュールがaiRadarに採用、LG Innotekが車載5G衛星通信モジュール発表、Nuvotronicsがフィルタ設計のためのStrataWorksプラットフォーム発表、TechInsigtsのXiaomi 15S Pro分解、QualcommがAlphawave Semi買収(2025.06.11)
« パンダエクスプレス りんくうプレミアムアウトレット店でビッグプレート(オレンジチキン、クンパオチキン、モンゴリアンポーク)をいただく。アメリカに住んでいた時、オレンジチキンにハマって月2くらいで通っていた。 | トップページ | UnityでVisual C#用の数値計算ライブラリMath.NET Numericsを使う(5) ルンゲクッタ法でローレンツ方程式を計算して、その軌道通りに球を3D画面で動かし、そこに軌跡が残るようにする。さらにカメラも回転させる。 »
コメント