zoukankan      html  css  js  c++  java
  • FFT与游戏开发(二)

    FFT与游戏开发(二)

    首先补充下傅里叶变换的原理——把函数分解到一系列正交基上,这些正交基复合下面的条件:

    [egin{cases} int_{-infty}^{+infty} f_k(x) f_j(x) mathrm d x eq 0 & k=j \ int_{-infty}^{+infty} f_k(x) f_j(x) mathrm d x = 0 & k eq j end{cases} ]

    其实这就是一种基的变换,图形学中也有一些变换,如坐标系的变换,球面函数变换到SH,SG等等。

    一、从一维DFT到二维DFT

    和一维DFT一样,二维DFT所做的事情是把二维空间上的信号分解上二维空间上不同方向的三角函数信号之和。下图解释了这一点。

    注意到转换后的结果是旋转对称的,一维DFT的结果也可以看出来是对称的。

    1. 一维DFT的输入
    2. 一维DFT的输出

    二、二维DFT的可分离特性

    原始公式:

    [F(k, l) = frac{1}{MN} sum_{m=0}^{M-1} sum_{n=0}^{N-1} f(m, n) e^{-j2pi left( frac{k}{M}m + frac{l}{N}n ight)} ]

    注意到,这个计算是可分离的,就是可以把二维DFT的计算分成内外两层1维DFT的计算:

    [F(k, l) = frac{1}{M} sum_{m=0}^{M-1} left[ frac{1}{N} sum_{n=0}^{N-1} f(m, n) e^{-j2pi frac{ln}{N}} ight] e^{-j2pifrac{km}{M}} ]

    具体做法是,对每行/列元素进行一次DFT之后,对结果的每一列/行再进行一次DFT。

  • 相关阅读:
    c++中for的四种用法
    同步
    排列算法(reverse...rotate...next_permutation)
    指针
    const的使用
    const_cast
    c++设计模式——单例模式
    c++中的流
    c++从string类型转换为bool类型
    结构体字节对齐方式
  • 原文地址:https://www.cnblogs.com/hamwj1991/p/12400611.html
Copyright © 2011-2022 走看看