Welcome

首页 / 软件开发 / C++ / 水波模拟的实现方法

水波模拟的实现方法2011-06-02在一个波长范围内,任意点的位移disp=sin(dist)*force+disp_center;

这里设水波为正弦波,振幅为force,disp_center为振中的位移。

推广到任何点,disp=sin(dist%wave_length)*force+disp_center;

这里wave_length为波长。可以看出,在离散的数据中,任何点的位移是有限的集合。我们先构造出这个集合,在运算过程中,从集合中选取一个位移值就行了,而不用实时计算每个点的位移。

程序设计如下:取波长为12,任何点的位移由一个12个元素的数组。

int disp[12];

建立一个数组成存贮各点来振中的距离

int dist[600][800];

下面生成一个水波

inline void Build_Disp_Matrix(){for(int i = 0; i < 12; ++i)disp = static_cast<int>(sin((double)i*30*DXPI/360)*PRECISION);}void Create_Ripple(int center_x, int center_y, int force, int damp, int wave_length){for(int i = 0 ; i < wave_length; ++i){disp = force * disp / PRECISION;}int dist_x, dist_y;for(i = 0; i < SCREEN_HEIGHT; ++i){for(int j = 0; j< SCREEN_WIDTH; ++j){dist_y = i - center_y;dist_x = j - center_x;dist[j] = static_cast<int>(sqrt(dist_x*dist_x + dist_y*dist_y) + 0.5) % wave_length;}}}