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(legendre_ex OFF)
|
||||
add_example(refellipsoid_ex OFF)
|
||||
add_example(kde_ex ON)
|
||||
add_example(kde_ex OFF)
|
||||
add_example(meshio_ex OFF)
|
||||
add_example(autodiff_ex OFF)
|
||||
add_example(multinary_ex OFF)
|
||||
add_example(text_io_ex OFF)
|
||||
add_example(getoption_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.show();
|
||||
|
||||
A.sequence(1.0, 0.5, 3, 4, 1);
|
||||
A.show();
|
||||
|
||||
// copy A to a new array
|
||||
array<double> B = A;
|
||||
B.normalize();
|
||||
@ -53,6 +56,10 @@ int main(int argc, char const *argv[]) try
|
||||
S.normalize();
|
||||
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
|
||||
matrix<int> C(5, 5, 1);
|
||||
C.sequence(0, 1, 10);
|
||||
|
@ -129,21 +129,23 @@ double gctl::sph_linear_interpolate_deg(double CoLat1,double CoLat2,double Lon1,
|
||||
// 插值点坐标x 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 total_dist = 0;
|
||||
double dist[4] = {0,0,0,0};
|
||||
double val[4];
|
||||
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[1] = 1.0/(1e-30+(x-dx-x0)*(x-dx-x0)+(y-y0)*(y-y0));
|
||||
dist[2] = 1.0/(1e-30+(x-dx-x0)*(x-dx-x0)+(y-dy-y0)*(y-dy-y0));
|
||||
dist[3] = 1.0/(1e-30+(x-x0)*(x-x0)+(y-dy-y0)*(y-dy-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 + pow((x-dx-x0)*(x-dx-x0)+(y-y0)*(y-y0), 0.5*p));
|
||||
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 + pow((x-x0)*(x-x0)+(y-dy-y0)*(y-dy-y0), 0.5*p));
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
total_dist += dist[i];
|
||||
}
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
res += val[i]*dist[i]/total_dist;
|
||||
|
@ -133,7 +133,7 @@ namespace gctl
|
||||
/**
|
||||
* @brief 规则网络插值 长方形内数据插值
|
||||
*
|
||||
* @note 距离平方反比
|
||||
* @note 默认为距离平方反比
|
||||
*
|
||||
* y
|
||||
* |
|
||||
@ -157,11 +157,12 @@ namespace gctl
|
||||
* @param[in] d1 d1值
|
||||
* @param[in] d2 d2值
|
||||
* @param[in] d3 d3值
|
||||
* @param[in] p 距离次方值 默认为2
|
||||
*
|
||||
* @return 插值点值
|
||||
*/
|
||||
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 规则网络插值 长方体内数据插值
|
||||
|
@ -528,8 +528,12 @@ namespace gctl
|
||||
*
|
||||
* @param st_val Start value.
|
||||
* @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.
|
||||
@ -1328,14 +1332,27 @@ namespace gctl
|
||||
}
|
||||
|
||||
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,
|
||||
// "gctl::array<T>::sequence(...) could only be used with an arithmetic type.");
|
||||
if (st_id >= length_) throw std::runtime_error("[gctl::array<T>::sequence] Invalid index.");
|
||||
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;
|
||||
}
|
||||
@ -1344,9 +1361,6 @@ namespace gctl
|
||||
void array<ArrValType>::sequence2d(ArrValType rs, ArrValType rinc,
|
||||
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_)
|
||||
{
|
||||
throw invalid_argument("[gctl::array<T>::sequence2d] Invalid sequence sizes.");
|
||||
@ -1371,9 +1385,6 @@ namespace gctl
|
||||
ArrValType rs, ArrValType rinc, ArrValType cs, ArrValType cinc,
|
||||
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_)
|
||||
{
|
||||
throw invalid_argument("[gctl::array<T>::sequence3d] Invalid sequence sizes.");
|
||||
|
Loading…
Reference in New Issue
Block a user