gctl/lib/math/interpolate.h

316 lines
11 KiB
C
Raw Normal View History

2024-09-10 15:45:07 +08:00
/********************************************************
*
*
*
*
*
*
* Geophysical Computational Tools & Library (GCTL)
*
* Copyright (c) 2023 Yi Zhang (yizhang-geo@zju.edu.cn)
*
* GCTL is distributed under a dual licensing scheme. You can redistribute
* it and/or modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation, either version 2
* of the License, or (at your option) any later version. You should have
* received a copy of the GNU Lesser General Public License along with this
* program. If not, see <http://www.gnu.org/licenses/>.
*
* If the terms and conditions of the LGPL v.2. would prevent you from using
* the GCTL, please consider the option to obtain a commercial license for a
* fee. These licenses are offered by the GCTL's original author. As a rule,
* licenses are provided "as-is", unlimited in time for a one time fee. Please
* send corresponding requests to: yizhang-geo@zju.edu.cn. Please do not forget
* to include some description of your company and the realm of its activities.
* Also add information on how to contact you by electronic and paper mail.
******************************************************/
#ifndef _GCTL_INTERPOLATE_H
#define _GCTL_INTERPOLATE_H
2025-04-23 12:39:44 +08:00
#include "geometry3d.h"
2024-09-10 15:45:07 +08:00
#include "algorithm_func.h"
namespace gctl
{
/**
* @brief 线
*
* @param[in] x1 x1值
* @param[in] x2 x2值
* @param[in] y1 y1值
* @param[in] y2 y2值
* @param[in] x
*
* @return
*/
double line_interpolate(double x1, double x2, double y1, double y2, double x);
/**
* @brief 线
*
* @param xmin x的最小值
* @param xmax x的最大值
* @param y_arr
* @param x
* @return
*/
double line_interpolate(double xmin, double xmax, const array<double> &y_arr, double x);
/**
* @brief 线
*
* @param x_arr
* @param y_arr
* @param x
* @return
*/
double line_interpolate(const array<double> &x_arr, const array<double> &y_arr, double x);
/**
* @brief 线
*
* @warning
*
* lat
* |
* |
* h21----h22
* | |
* | |
* h11----h12----> lon
*
* @param[in] CoLat1
* @param[in] CoLat2
* @param[in] Lon1 西
* @param[in] Lon2 西
* @param[in] CoLat0
* @param[in] Lon0
* @param[in] h11 h11点值
* @param[in] h12 h12点值
* @param[in] h21 h21点值
* @param[in] h22 h22点值
*
* @return
*/
double sph_linear_interpolate(double CoLat1, double CoLat2, double Lon1, double Lon2,
double CoLat0, double Lon0, double h11, double h12, double h21, double h22);
/**
* @brief 线
*
* @warning
*
* lat
* |
* |
* h21----h22
* | |
* | |
* h11----h12----> lon
*
* @param[in] CoLat1
* @param[in] CoLat2
* @param[in] Lon1 西
* @param[in] Lon2 西
* @param[in] CoLat0
* @param[in] Lon0
* @param[in] h11 h11点值
* @param[in] h12 h12点值
* @param[in] h21 h21点值
* @param[in] h22 h22点值
*
* @return
*/
double sph_linear_interpolate_deg(double CoLat1, double CoLat2, double Lon1, double Lon2,
double CoLat0, double Lon0, double h11, double h12, double h21, double h22);
/**
* @brief
*
2024-10-24 12:15:09 +08:00
* @note
2024-09-10 15:45:07 +08:00
*
* y
* |
* |
* d3-----------d2
* | |
* | |
* | |
* d0-----------d1--->x
* x0 y0
* dx dy
* x y
*
* @param[in] x0 x0
* @param[in] y0 y0
* @param[in] dx dx
* @param[in] dy dy
* @param[in] x x
* @param[in] y y
* @param[in] d0 d0值
* @param[in] d1 d1值
* @param[in] d2 d2值
* @param[in] d3 d3值
2024-10-24 12:15:09 +08:00
* @param[in] p 2
2024-09-10 15:45:07 +08:00
*
* @return
*/
double rect_interpolate(double x0, double y0, double dx, double dy, double x, double y,
2024-10-24 12:15:09 +08:00
double d0, double d1, double d2, double d3, double p = 2.0);
2024-09-10 15:45:07 +08:00
/**
* @brief
*
* @note
*
* y
* /
* /
* 3------------2
* /| /|
* / | / |
* 0------------1------> x
* | 7 | 6
* | / | /
* |/ |/
* 4------------5
* |
* |
* z
* x0 y0 z0
* dx dy dz
* x y z
*
*
* @param[in] x0 x0
* @param[in] y0 y0
* @param[in] z0 z0
* @param[in] dx dx
* @param[in] dy dy
* @param[in] dz dz
* @param[in] x x
* @param[in] y y
* @param[in] z z
* @param[in] d0 d0
* @param[in] d1 d1
* @param[in] d2 d2
* @param[in] d3 d3
* @param[in] d4 d4
* @param[in] d5 d5
* @param[in] d6 d6
* @param[in] d7 d7
*
* @return
*/
double cube_interpolate(double x0, double y0, double z0, double dx, double dy, double dz,
double x, double y, double z, double d0, double d1, double d2, double d3, double d4,
double d5, double d6, double d7);
/**
* @brief Tesseroid
*
* @note 线 线
*
*
* lat
* /
* /
* 7------------6
* /| /|
* / | / |
* 4------------5------> lon
* | 3 | 2
* | / | /
* |/ |/
* 0------------1
* |
* |
* rad
* lon0 lat0 rad0
* dlon dlat drad
* lon lat rad
*
*
* @param[in] lon0 rad0
* @param[in] lat0 lat0
* @param[in] rad0 rad0
* @param[in] dlon dlon
* @param[in] dlat dlat
* @param[in] drad drad
* @param[in] lon lon
* @param[in] lat lat
* @param[in] rad rad
* @param[in] d0 d0
* @param[in] d1 d1
* @param[in] d2 d2
* @param[in] d3 d3
* @param[in] d4 d4
* @param[in] d5 d5
* @param[in] d6 d6
* @param[in] d7 d7
*
* @return
*/
double cube_interpolate_sph(double lon0, double lat0, double rad0, double dlon, double dlat,
double drad, double lon, double lat, double rad, double d0, double d1, double d2,
double d3, double d4, double d5, double d6, double d7);
/**
* @brief
*
* @note
*
* @param out_posi
* @param[in] out_num
* @param in_posi
* @param in_val
* @param[in] in_num
* @param[in] search_xlen x轴长度
* @param[in] search_ylen y轴长度
* @param[in] search_deg
*
* @return
*/
array<double> *p2p_dist_2d(point2dc * out_posi, int out_num, point2dc *in_posi, double *in_val,
int in_num, double search_xlen, double search_ylen, double search_deg);
/**
* @brief
*
* @note
*
* @param out_posi
* @param[in] out_num
* @param in_posi
* @param in_val
* @param[in] in_num
* @param[in] search_xlen x方向长度
* @param[in] search_ylen y方向长度
* @param[in] search_zlen z方向长度
*
* @return
*/
array<double> *p2p_dist(point3dc * out_posi, int out_num, point3dc *in_posi, double *in_val,
int in_num, double search_xlen, double search_ylen, double search_zlen);
/**
* @brief
*
* @note
*
* @param out_posi
* @param[in] out_num
* @param in_posi
* @param in_val
* @param[in] in_num
* @param[in] search_rlen
* @param[in] search_deg
*
* @return
*/
array<double> *p2p_dist_sph(point3ds * out_posi, int out_num, point3ds *in_posi, double *in_val,
int in_num, double search_rlen, double search_deg);
2025-02-06 21:17:24 +08:00
};
2024-09-10 15:45:07 +08:00
#endif // _GCTL_INTERPOLATE_H