水波算法 http://dev.csdn.net/article/0/243.shtm
我的补充与修正:
事实上, 在上面的推导公式里, 他把平面的水想象成一个球状的水体了。 这样边界的水点才会受作用于“在平面上另一相对极端的水点的作用”。
(因为这里不能考虑到墙壁对水点势能的作用,只好把平面的水体想成球状的水体。 就好像是一个金字塔) 从而X0’=a(X1+X2+X3+X4)+bX0 才可能解。
由观察而作出推设:每个水点受会受自身势能和四周势能作用, 于是假设其公式为:
X0’=a(X1+X2+X3+X4)+bX0 (表达式一)
由能量守恒定理可得:
X0’+X1’+...+Xn’ = X0+X1+...+Xn (表达式二)
也即是说会有:
X0’+X1’+...+X4’ = X0+X1+...+X4 (表达式三)
由表达式一和表达式三,可得
4a + b = 1 (表达式四)
(
五个水点, 故表达式一在计算时总共可化五条, 每条都从a乘的括号的五个可选水点势能里抽一个水点势能到括号外与b相乘,故化后自会出现 a*(4*X0 + 4*X1 + 4*X2 + 4*X3 + 4*X4) + b*(X0 + X1 ... + X4) = X0 + X1 ... + X4
由这点可以想像, 如果把水点考虑在立体位置的, 也就是说, 它不单受到前后左右压力, 还受到上下的压力将会出现的公式可能就是6a + b = 1喽。
得说明的是, 转贴的那个公式不准确, n个水点的所推出的公式应是:
((n-1)a+b)X0+ ((n-1)a+b)X1+... ((n-1)a+b)Xn = X0+X1+...+Xn
)
得出表达式四后,就可随意找它的一组可行解拿来用就行啦。