DPSA/app/algorithms.py
2025-05-06 20:27:42 +08:00

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