C# のハイトマップ (またはハイトフィールド) クラスに双一次補間を実装しようとしましたが、Wiki の数学がよくわかりません。これは、heightfield クラスの実装です。NotImplementedException をスローする 2 番目の関数 Mathf.BilinearInterpolation(...) があります。
/// <summary>
/// A flattened 2D array which contains the surface elevation data.
/// </summary>
public float[] Elevation { get; }
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public float ElevationAtVertex(int x, int y)
{
return Elevation[x + y + (y * Length)];
}
public float ElevationAtPoint(float x, float y)
{
float f1 = ElevationAtVertex(Mathf.Floor(x), Mathf.Floor(y));
float f2 = ElevationAtVertex(Mathf.Floor(x), Mathf.Ceiling(y));
float f3 = ElevationAtVertex(Mathf.Ceiling(x), Mathf.Floor(y));
float f4 = ElevationAtVertex(Mathf.Ceiling(x), Mathf.Ceiling(y));
return Mathf.BilinearInterpolation(f1, f2, f3, f4);
}