33 void revsort(
double *a,
int *ib,
int n);
39 std::vector<I>
do_sample(
int n,
int nval,
const std::vector<I> &val,
const std::vector<double> &proba)
41 using Rec = std::tuple<I, double>;
44 bool operator () (
const Rec&v1,
const Rec&v2)
const {
45 return std::get<1>(v1) > std::get<1>(v2);
49 if (val.size() == 0 || proba.size() == 0 || nval == 0)
52 if (nval != (
int)val.size() || nval != (int)proba.size())
53 throw std::invalid_argument(
"do_sample requires nval == val.size() == proba.size()");
57 for (
auto pr : proba) {
62 for (
int i = 0; i < (int)val.size(); ++i) {
63 prb.push_back(std::make_pair(val[i], proba[i]/ total));
75 std::sort(prb.begin(), prb.end(), RecGreater());
78 for (
int i = 1 ; i < nval; i++) {
79 std::get<1>(prb[i]) += std::get<1>(prb[i - 1]);
83 for (
int i = 0; i < nans; i++)
87 for (j = 0; j < nm1; j++)
89 if (rU <= std::get<1>(prb[j]))
92 res.push_back(std::get<0>(prb[j]));
98 void set_seed(
unsigned int i1,
unsigned int i2);
99 void get_seed(
unsigned int *i1,
unsigned int *i2);
101 double fmax2(
double x,
double y);
102 double fmin2(
double x,
double y);
104 double rgamma(
double a,
double scale);
105 double rnorm(
double mu,
double sigma);
106 double rlnorm(
double meanlog,
double sdlog);
109 inline double dist (
double x1,
double y1,
double x2,
double y2)
112 double Rearth = 6371.0;
113 double res = Rearth * acos(sin(y1/p)*sin(y2/p) + (cos(y1/p) * cos(y2/p)*cos(x1/p - x2/p)));
119 inline double bearing (
double x1,
double y1,
double x2,
double y2)
122 double res = atan2( sin((x2/p)-(x1/p))*cos(y2/p), cos(y1/p)*sin(y2/p)-sin(y1/p)*cos(y2/p)*cos((x2/p)-(x1/p)) );
128 inline vector<double>
destB (
double x1,
double y1,
double angleAB,
double distkm)
130 vector<double> res(2);
132 double Rearth = 6371.0;
134 res[1] = asin((sin(y1/p)*cos(distkm/Rearth)) + (cos(y1/p)*sin(distkm/Rearth)*cos(angleAB/p))) ;
136 res[0] = (x1/p + atan2(sin(angleAB/p)*sin(distkm/Rearth)*cos(y1/p), cos(distkm/Rearth)-sin(y1/p)*sin(res[1])) ) ;
145 vector <double> res(2);
149 res[1] = y1 - res[0] * x1;
158 double left, right, top, bottom;
182 if( equ[0] * x3 + equ[1] > (y3 - 0.01) &&
183 equ[0] * x3 + equ[1] < (y3 + 0.01))
185 if( x3 > left && x3 < right &&
186 y3 > top && y3 < bottom )
std::vector< I > do_sample(int n, int nval, const std::vector< I > &val, const std::vector< double > &proba)
Definition: myRutils.h:39
void set_seed(unsigned int i1, unsigned int i2)
Definition: myRutils.cpp:46
double dist(double x1, double y1, double x2, double y2)
Definition: myRutils.h:109
double norm_rand(void)
Definition: myRutils.cpp:363
int is_pt_lying_on_segment(double x1, double x2, double x3, double y1, double y2, double y3)
Definition: myRutils.h:155
void ProbSampleReplace(int n, double *p, int *perm, int nans, int *ans)
Definition: myRutils.cpp:142
void revsort(double *a, int *ib, int n)
Definition: myRutils.cpp:72
Definition: pathshop.cpp:8
double unif_rand(void)
Definition: myRutils.cpp:60
double fmax2(double x, double y)
Definition: myRutils.cpp:329
double exp_rand(void)
Definition: myRutils.cpp:269
double fmin2(double x, double y)
Definition: myRutils.cpp:339
double rgamma(double a, double scale)
Definition: myRutils.cpp:504
double rlnorm(double meanlog, double sdlog)
Definition: myRutils.cpp:691
#define M_PI
Definition: m_constants.h:26
vector< double > destB(double x1, double y1, double angleAB, double distkm)
Definition: myRutils.h:128
vector< double > compute_line_equation(double x1, double x2, double y1, double y2)
Definition: myRutils.h:143
double bearing(double x1, double y1, double x2, double y2)
Definition: myRutils.h:119
void get_seed(unsigned int *i1, unsigned int *i2)
Definition: myRutils.cpp:53
double rnorm(double mu, double sigma)
Definition: myRutils.cpp:685