CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

任意の曲面を三次元フーリエ変換するPythonプログラムを書いて

2023-03-13 03:45:54 | python
任意の曲面を三次元フーリエ変換するPythonプログラムを書いて

3次元フーリエ変換を実行するPythonプログラムは以下のようになります。ここではnumpyとscipyのライブラリを使用します。

import numpy as np from scipy.fftpack import fftn, ifftn import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 3次元フーリエ変換 def fft3d(surface): return fftn(surface) # 3次元逆フーリエ変換 def ifft3d(fourier_surface): return ifftn(fourier_surface).real # メイン関数 def main(): # 3次元曲面を生成する x = np.linspace(-10, 10, 64) y = np.linspace(-10, 10, 64) z = np.linspace(-10, 10, 64) xv, yv, zv = np.meshgrid(x, y, z) surface = np.sin(np.sqrt(xv ** 2 + yv ** 2 + zv ** 2)) / np.sqrt(xv ** 2 + yv ** 2 + zv ** 2) # フーリエ変換する fourier_surface = fft3d(surface) # フーリエ逆変換して元の曲面を復元する restored_surface = ifft3d(fourier_surface) # 結果をプロットする fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.set_title("Restored Surface") ax.set_xlabel("X") ax.set_ylabel("Y") ax.set_zlabel("Z") ax.plot_surface(xv, yv, restored_surface, cmap="gray") plt.show() if __name__ == "__main__": main()

このプログラムは、-10から10までの範囲のx、y、zの値を持つ64x64x64のメッシュグリッドを作成し、それに対してsin(sqrt(x^2 + y^2 + z^2))/sqrt(x^2 + y^2 + z^2)を適用して、3次元曲面を生成します。その後、生成された3次元曲面に対して3次元フーリエ変換を実行し、フーリエ逆変換によって復元された曲面を計算します。最後に、復元された曲面を3Dプロットして表示します。



最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。