tmp
This commit is contained in:
parent
c95b20255a
commit
b3122a43c1
@ -21,11 +21,11 @@ add_example(fft_filter_ex OFF)
|
|||||||
add_example(windowfunc_ex OFF)
|
add_example(windowfunc_ex OFF)
|
||||||
add_example(legendre_ex OFF)
|
add_example(legendre_ex OFF)
|
||||||
add_example(refellipsoid_ex OFF)
|
add_example(refellipsoid_ex OFF)
|
||||||
add_example(kde_ex ON)
|
add_example(kde_ex OFF)
|
||||||
add_example(meshio_ex OFF)
|
add_example(meshio_ex OFF)
|
||||||
add_example(autodiff_ex OFF)
|
add_example(autodiff_ex OFF)
|
||||||
add_example(multinary_ex OFF)
|
add_example(multinary_ex OFF)
|
||||||
add_example(text_io_ex OFF)
|
add_example(text_io_ex OFF)
|
||||||
add_example(getoption_ex OFF)
|
add_example(getoption_ex OFF)
|
||||||
add_example(process_ex OFF)
|
add_example(process_ex OFF)
|
||||||
add_example(array_ex OFF)
|
add_example(array_ex ON)
|
@ -41,6 +41,9 @@ int main(int argc, char const *argv[]) try
|
|||||||
A.for_each([](double &a, size_t i){ a += 1;});
|
A.for_each([](double &a, size_t i){ a += 1;});
|
||||||
A.show();
|
A.show();
|
||||||
|
|
||||||
|
A.sequence(1.0, 0.5, 3, 4, 1);
|
||||||
|
A.show();
|
||||||
|
|
||||||
// copy A to a new array
|
// copy A to a new array
|
||||||
array<double> B = A;
|
array<double> B = A;
|
||||||
B.normalize();
|
B.normalize();
|
||||||
@ -53,6 +56,10 @@ int main(int argc, char const *argv[]) try
|
|||||||
S.normalize();
|
S.normalize();
|
||||||
S.show();
|
S.show();
|
||||||
|
|
||||||
|
array<point3dc> P(5);
|
||||||
|
P.sequence(point3dc(0, 0, 0), point3dc(2, 1, 0.5));
|
||||||
|
P.show(std::cout, '\n');
|
||||||
|
|
||||||
// create a new 2D array
|
// create a new 2D array
|
||||||
matrix<int> C(5, 5, 1);
|
matrix<int> C(5, 5, 1);
|
||||||
C.sequence(0, 1, 10);
|
C.sequence(0, 1, 10);
|
||||||
|
@ -129,21 +129,23 @@ double gctl::sph_linear_interpolate_deg(double CoLat1,double CoLat2,double Lon1,
|
|||||||
// 插值点坐标x y
|
// 插值点坐标x y
|
||||||
// 四个角点值
|
// 四个角点值
|
||||||
double gctl::rect_interpolate(double x0,double y0,double dx,double dy,double x,double y,
|
double gctl::rect_interpolate(double x0,double y0,double dx,double dy,double x,double y,
|
||||||
double d0,double d1,double d2,double d3)
|
double d0,double d1,double d2,double d3, double p)
|
||||||
{
|
{
|
||||||
double res = 0;
|
double res = 0;
|
||||||
double total_dist = 0;
|
double total_dist = 0;
|
||||||
double dist[4] = {0,0,0,0};
|
double dist[4] = {0,0,0,0};
|
||||||
double val[4];
|
double val[4];
|
||||||
val[0] = d0; val[1] = d1; val[2] = d2; val[3] = d3;
|
val[0] = d0; val[1] = d1; val[2] = d2; val[3] = d3;
|
||||||
dist[0] = 1.0/(1e-30+(x-x0)*(x-x0)+(y-y0)*(y-y0));
|
dist[0] = 1.0/(1e-30 + pow((x-x0)*(x-x0)+(y-y0)*(y-y0), 0.5*p));
|
||||||
dist[1] = 1.0/(1e-30+(x-dx-x0)*(x-dx-x0)+(y-y0)*(y-y0));
|
dist[1] = 1.0/(1e-30 + pow((x-dx-x0)*(x-dx-x0)+(y-y0)*(y-y0), 0.5*p));
|
||||||
dist[2] = 1.0/(1e-30+(x-dx-x0)*(x-dx-x0)+(y-dy-y0)*(y-dy-y0));
|
dist[2] = 1.0/(1e-30 + pow((x-dx-x0)*(x-dx-x0)+(y-dy-y0)*(y-dy-y0), 0.5*p));
|
||||||
dist[3] = 1.0/(1e-30+(x-x0)*(x-x0)+(y-dy-y0)*(y-dy-y0));
|
dist[3] = 1.0/(1e-30 + pow((x-x0)*(x-x0)+(y-dy-y0)*(y-dy-y0), 0.5*p));
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
total_dist += dist[i];
|
total_dist += dist[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < 4; i++)
|
for (int i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
res += val[i]*dist[i]/total_dist;
|
res += val[i]*dist[i]/total_dist;
|
||||||
|
@ -133,7 +133,7 @@ namespace gctl
|
|||||||
/**
|
/**
|
||||||
* @brief 规则网络插值 长方形内数据插值
|
* @brief 规则网络插值 长方形内数据插值
|
||||||
*
|
*
|
||||||
* @note 距离平方反比
|
* @note 默认为距离平方反比
|
||||||
*
|
*
|
||||||
* y
|
* y
|
||||||
* |
|
* |
|
||||||
@ -157,11 +157,12 @@ namespace gctl
|
|||||||
* @param[in] d1 d1值
|
* @param[in] d1 d1值
|
||||||
* @param[in] d2 d2值
|
* @param[in] d2 d2值
|
||||||
* @param[in] d3 d3值
|
* @param[in] d3 d3值
|
||||||
|
* @param[in] p 距离次方值 默认为2
|
||||||
*
|
*
|
||||||
* @return 插值点值
|
* @return 插值点值
|
||||||
*/
|
*/
|
||||||
double rect_interpolate(double x0, double y0, double dx, double dy, double x, double y,
|
double rect_interpolate(double x0, double y0, double dx, double dy, double x, double y,
|
||||||
double d0, double d1, double d2, double d3);
|
double d0, double d1, double d2, double d3, double p = 2.0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief 规则网络插值 长方体内数据插值
|
* @brief 规则网络插值 长方体内数据插值
|
||||||
|
@ -528,8 +528,12 @@ namespace gctl
|
|||||||
*
|
*
|
||||||
* @param st_val Start value.
|
* @param st_val Start value.
|
||||||
* @param inc Increasement.
|
* @param inc Increasement.
|
||||||
|
* @param st_id Start index.
|
||||||
|
* @param size Operating size.
|
||||||
|
* @param space Indexing spacing.
|
||||||
*/
|
*/
|
||||||
void sequence(ArrValType st_val, ArrValType inc);
|
void sequence(ArrValType st_val, ArrValType inc, size_t st_id = 0,
|
||||||
|
size_t size = std::numeric_limits<size_t>::max(), size_t space = 0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Assign values as a 2D sequence.
|
* @brief Assign values as a 2D sequence.
|
||||||
@ -1328,14 +1332,27 @@ namespace gctl
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename ArrValType>
|
template <typename ArrValType>
|
||||||
void array<ArrValType>::sequence(ArrValType st_val, ArrValType inc)
|
void array<ArrValType>::sequence(ArrValType st_val, ArrValType inc,
|
||||||
|
size_t st_id, size_t size, size_t space)
|
||||||
{
|
{
|
||||||
//static_assert(std::is_arithmetic<ArrValType>::value,
|
if (st_id >= length_) throw std::runtime_error("[gctl::array<T>::sequence] Invalid index.");
|
||||||
// "gctl::array<T>::sequence(...) could only be used with an arithmetic type.");
|
size = GCTL_MIN(size, length_);
|
||||||
|
|
||||||
for (size_t i = 0; i < length_; i++)
|
if (size > 0)
|
||||||
{
|
{
|
||||||
val_[i] = st_val + i*inc;
|
val_[st_id] = st_val;
|
||||||
|
size--;
|
||||||
|
|
||||||
|
size_t id = st_id;
|
||||||
|
size_t id2 = st_id + space + 1;
|
||||||
|
while (id2 < length_ && size > 0)
|
||||||
|
{
|
||||||
|
val_[id2] = val_[id] + inc;
|
||||||
|
|
||||||
|
id = id2;
|
||||||
|
id2 += space + 1;
|
||||||
|
size--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1344,9 +1361,6 @@ namespace gctl
|
|||||||
void array<ArrValType>::sequence2d(ArrValType rs, ArrValType rinc,
|
void array<ArrValType>::sequence2d(ArrValType rs, ArrValType rinc,
|
||||||
ArrValType cs, ArrValType cinc, size_t rn, size_t cn)
|
ArrValType cs, ArrValType cinc, size_t rn, size_t cn)
|
||||||
{
|
{
|
||||||
//static_assert(std::is_arithmetic<ArrValType>::value,
|
|
||||||
// "gctl::array<T>::sequence2d(...) could only be used with an arithmetic type.");
|
|
||||||
|
|
||||||
if (rn*cn != length_)
|
if (rn*cn != length_)
|
||||||
{
|
{
|
||||||
throw invalid_argument("[gctl::array<T>::sequence2d] Invalid sequence sizes.");
|
throw invalid_argument("[gctl::array<T>::sequence2d] Invalid sequence sizes.");
|
||||||
@ -1371,9 +1385,6 @@ namespace gctl
|
|||||||
ArrValType rs, ArrValType rinc, ArrValType cs, ArrValType cinc,
|
ArrValType rs, ArrValType rinc, ArrValType cs, ArrValType cinc,
|
||||||
size_t ln, size_t rn, size_t cn)
|
size_t ln, size_t rn, size_t cn)
|
||||||
{
|
{
|
||||||
//static_assert(std::is_arithmetic<ArrValType>::value,
|
|
||||||
// "gctl::array<T>::sequence3d(...) could only be used with an arithmetic type.");
|
|
||||||
|
|
||||||
if (ln*rn*cn != length_)
|
if (ln*rn*cn != length_)
|
||||||
{
|
{
|
||||||
throw invalid_argument("[gctl::array<T>::sequence3d] Invalid sequence sizes.");
|
throw invalid_argument("[gctl::array<T>::sequence3d] Invalid sequence sizes.");
|
||||||
|
Loading…
Reference in New Issue
Block a user