任意の曲面を三次元フーリエ変換する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プロットして表示します。