29 lines
996 B
Python
29 lines
996 B
Python
import numpy as np
|
|
from typing import List, Tuple
|
|
|
|
def bilinear_interpolation(
|
|
X_NUM: int,
|
|
Y_NUM: int,
|
|
X: float,
|
|
Y: float,
|
|
X0: List[float],
|
|
Y0: List[float],
|
|
Z0: np.ndarray
|
|
) -> Tuple[float, float, float, List[float]]:
|
|
"""
|
|
双线性插值计算
|
|
:param X_NUM: X方向点数 (整数)
|
|
:param Y_NUM: Y方向点数 (整数)
|
|
:param X: 目标X坐标 (浮点数)
|
|
:param Y: 目标Y坐标 (浮点数)
|
|
:param X0: X坐标数组 (浮点数列表)
|
|
:param Y0: Y坐标数组 (浮点数列表)
|
|
:param Z0: 二维数据数组 (numpy.ndarray, 形状为 Y_NUM x X_NUM)
|
|
:return: 元组 (Z, ZX, ZY, Z_OUT)
|
|
"""
|
|
X0_arr = np.array(X0) # 转换为NumPy数组
|
|
Z = np.interp(Y, Y0, Z0[:, np.argmin(np.abs(X0_arr - X))])
|
|
ZX = (np.interp(Y, Y0, Z0[:, np.argmin(np.abs(X0_arr - X + 0.1))]) - Z) / 0.1
|
|
ZY = (np.interp(Y + 0.1, Y0, Z0[:, np.argmin(np.abs(X0_arr - X))]) - Z) / 0.1
|
|
Z_OUT = Z0.flatten().tolist()
|
|
return Z, ZX, ZY, Z_OUT |