插值方法:
由于堆垒单位是直角三角形而不是正方形,使用双线性插值会在边界区域产生裂缝。
所以使用三角形插值,或者说质心坐标插值。这种插值方法对于任意形状的三角形都可以做到均匀插值,就是说,三点确定一个平面,那么利用三角形插值法得到的一个值,必定落在三个顶点定义的值平面上。
三角形插值的公式很恐怖,看上去像是恐龙……


其中P是所求点,w代表权重。
嗯,上式是解如下方程的结果:


有点混,px、Xv1应该都只是坐标值?
未知数三个w,有三个方程,那么这组方程是可以解出来的……
关于质心坐标,codeplea上面还有一个js做的图形演示,看到那个演示我就觉得,国外真是百花齐放,技术艺术积累之深难以想象……
具体代码:
js版本:
var calc_barycentric_weights = function(x, y, v1x, v1y, v2x, v2y, v3x, v3y) {
var w_v1 = ((v2y - v3y)*(x - v3x) + (v3x - v2x)*(y - v3y)) / ((v2y - v3y)*(v1x - v3x) + (v3x - v2x)*(v1y - v3y));
var w_v2 = ((v3y - v1y)*(x - v3x) + (v1x - v3x)*(y - v3y)) / ((v2y - v3y)*(v1x - v3x) + (v3x - v2x)*(v1y - v3y));
var w_v3 = 1.0 - w_v1 - w_v2;
return [w_v1, w_v2, w_v3];
}
直接复制过来的,很漂亮:
