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年2月7日 フジクラがMWCバルセロナでミリ波(28GHz,60GHz)モジュールデモ、Qorvo、NXP、AMDらのヘルスケアウェビナー、Samsung Galaxy S25もやはり5Gミリ波AiPは1個、u-bloxがBluetooth LEモジュール4種発表(2025.02.07)
- 高周波・RFニュース 2025年2月6日 3GPPがRel-20(5G Advancedと6G)の計画を公開、SEMCOが産業用MLCC(0805 inch, X6S, 22uF, 25V)と車載MLCC(1005,2.2uF,10V)を発表、KYOCERA AVXのスーパーキャパシタシミュレーションソフト、I向けフォトニックチップ解説(2025.02.06)
- 高周波・RFニュース 2025年2月5日 Mavenirの5G NTNホワイトペーパー、ミニサーキットの1.5mm角QFNパッケージMMIC、Keysigntがスペインに6G研究ラボ設立、アイルランドとスコットランドの大学がRIS(reconfigurable intelligent surfaces)で協力(2025.02.05)
- 高周波・RFニュース 2025年2月4日 Samsung Galaxy S25plus、S25ultra分解、やっぱり5Gミリ波AiPは1個だけ、スマートワイヤレス聴診器にNordicのICが採用、TDKのTMR角度センサ解説(2025.02.04)
「日記・コラム・つぶやき」カテゴリの記事
- 高周波・RFニュース 2025年2月7日 フジクラがMWCバルセロナでミリ波(28GHz,60GHz)モジュールデモ、Qorvo、NXP、AMDらのヘルスケアウェビナー、Samsung Galaxy S25もやはり5Gミリ波AiPは1個、u-bloxがBluetooth LEモジュール4種発表(2025.02.07)
- 高周波・RFニュース 2025年2月6日 3GPPがRel-20(5G Advancedと6G)の計画を公開、SEMCOが産業用MLCC(0805 inch, X6S, 22uF, 25V)と車載MLCC(1005,2.2uF,10V)を発表、KYOCERA AVXのスーパーキャパシタシミュレーションソフト、I向けフォトニックチップ解説(2025.02.06)
- 高周波・RFニュース 2025年2月5日 Mavenirの5G NTNホワイトペーパー、ミニサーキットの1.5mm角QFNパッケージMMIC、Keysigntがスペインに6G研究ラボ設立、アイルランドとスコットランドの大学がRIS(reconfigurable intelligent surfaces)で協力(2025.02.05)
- 高周波・RFニュース 2025年2月4日 Samsung Galaxy S25plus、S25ultra分解、やっぱり5Gミリ波AiPは1個だけ、スマートワイヤレス聴診器にNordicのICが採用、TDKのTMR角度センサ解説(2025.02.04)
« パンダエクスプレス りんくうプレミアムアウトレット店でビッグプレート(オレンジチキン、クンパオチキン、モンゴリアンポーク)をいただく。アメリカに住んでいた時、オレンジチキンにハマって月2くらいで通っていた。 | トップページ | UnityでVisual C#用の数値計算ライブラリMath.NET Numericsを使う(5) ルンゲクッタ法でローレンツ方程式を計算して、その軌道通りに球を3D画面で動かし、そこに軌跡が残るようにする。さらにカメラも回転させる。 »
コメント