三角形的线性插值
//输入三角形的三个点,输出三角形内一点的插值
float GetInterpValue(float x0, float y0, float value0,
float x1, float y1, float value1,
float x2, float y2, float value2,
float x, float y)
{
Vector3D p1 = { x1 - x, y1 - y, 0 };
Vector3D p2 = { x2 - x, y2 - y, 0 };
Vector3D p0 = { x0 - x, y0 - y };
Vector3D p12;
VectorCross(p12, p1, p2);
//三角形p12的面积
float Sp12 = CalculateVector3DLength(p12);
Vector3D p02;
VectorCross(p02, p0, p2);
//三角形p02的面积
float Sp02 = CalculateVector3DLength(p02);
Vector3D p01;
VectorCross(p01, p0, p1);
//三角形p01的面积
float Sp01 = CalculateVector3DLength(p01);
float total = Sp12 + Sp02 + Sp01;
//根据面积的权进行插值
float value = value0 * Sp12 / total + value1 * Sp02 / total + value2 * Sp01 / total;
return value;
}
有点毛边。。。。。。
Github地址