Заявка на участие в клубе создателей алгоритма объединения многоугольника и треугольника07.10.2024 16:00
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
double interval_point_point(double x, double y,
double u, double v){
double r = sqrt(pow((u-x),2) + pow((v-y),2));
return r;
}
double interval_line_point(double x0, double y0,
double x1, double y1,
double u, double v){
double r;
double ax;
double ay;
double bx;
double by;
double mod_a;
ax = x1 - x0;
ay = y1 - y0;
mod_a = sqrt(pow(ax,2) + pow(ay,2));
bx = u - x0;
by = v - y0;
r = abs(ax*by - ay*bx)/mod_a;
return r;
}
std::vector> segments_intersection_point (std::vector>seg1,
std::vector>seg2,
double r_point){
double x0 = seg1[0][0];
double y0 = seg1[0][1];
double x1 = seg1[1][0];
double y1 = seg1[1][1];
double u0 = seg2[0][0];
double v0 = seg2[0][1];
double u1 = seg2[1][0];
double v1 = seg2[1][1];
std::vector iio;
std::vector> points_attributes; // mask: [t_][tau_][cos_][sin_][x_][y_]
points_attributes.clear();
double t_;
double tau_;
double cos_ ;
double sin_ ;
double x_ ;
double y_ ;
double ax = x1 - x0;
double ay = y1 - y0;
double bx = u1 - u0;
double by = v1 - v0;
double ax_ = x0;
double ay_ = y0;
double bx_ = u0;
double by_ = v0;
double cx = bx_ - ax_;
double cy = by_ - ay_;
double a;
double b;
double c;
double det_0 = - ax*by + ay*bx;
double det_t = - cx*by + cy*bx;
double det_tau = ax*cy - ay*cx;
double r_a = sqrt( ax*ax+ay*ay );
double r_b = sqrt( bx*bx+by*by );
if (abs(det_0/r_a)> input_array,
std::vector>& output_add_array_1,
std::vector>& output_add_array_2,
std::array& Jordano_flag_t,
std::array& Jordano_flag_tau ){
std::vector iii;
double t_;
double tau_;
double cos_ ;
double sin_ ;
double x_ ;
double y_ ;
if(input_array.size()==1){
t_ = input_array[0][0];
tau_ = input_array[0][1];
cos_ = input_array[0][2];
sin_ = input_array[0][3];
x_ = input_array[0][4];
y_ = input_array[0][5];
if( t_<0.0 ){
if(tau_==0.0){ if(sin_>0.0) {Jordano_flag_t[0] = Jordano_flag_t[0] + 1;} };
if(tau_>0.0 && tau_<1.0){ Jordano_flag_t[0] = Jordano_flag_t[0] + 1; };
if(tau_==1.0){ if(-sin_>0.0) {Jordano_flag_t[0] = Jordano_flag_t[0] + 1;} };
};
if( t_==0.0 ){
if(tau_<0.0){ if(-sin_>0.0) {Jordano_flag_tau[0] = Jordano_flag_tau[0] + 1;} };
if(tau_==0.0){
iii.push_back(t_); // t_
iii.push_back(0.0); // tau_
iii.push_back(cos_); // cos_
iii.push_back(sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(tau_); // tau_
iii.push_back(0.0); // t_
iii.push_back(cos_); // cos_
iii.push_back(-sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_2.push_back(iii);
iii.clear();
};
if(tau_>0.0 && tau_<1.0){
iii.push_back(t_); // t_
iii.push_back(0.0); // tau_
iii.push_back(cos_); // cos_
iii.push_back(sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(t_); // t_
iii.push_back(1.0); // tau_
iii.push_back(-cos_); // cos_
iii.push_back(-sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(tau_); // tau_
iii.push_back(0.0); // t_
iii.push_back(cos_); // cos_
iii.push_back(-sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_2.push_back(iii);
iii.clear();
};
if(tau_==1.0){
iii.push_back(t_); // t_
iii.push_back(1.0); // tau_
iii.push_back(-cos_); // cos_
iii.push_back(-sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(tau_); // tau_
iii.push_back(0.0); // t_
iii.push_back(cos_); // cos_
iii.push_back(-sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_2.push_back(iii);
iii.clear();
};
if(tau_>1.0){ if(-sin_>0.0) {Jordano_flag_tau[1] = Jordano_flag_tau[1] + 1;} };
};
if( t_>0.0 && t_<1.0 ){
if(tau_<0.0){ Jordano_flag_tau[0] = Jordano_flag_tau[0] + 1; };
if(tau_==0.0){
iii.push_back(t_); // t_
iii.push_back(0.0); // tau_
iii.push_back(cos_); // cos_
iii.push_back(sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(tau_); // tau_
iii.push_back(0.0); // t_
iii.push_back(cos_); // cos_
iii.push_back(-sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_2.push_back(iii);
iii.clear();
iii.push_back(tau_); // tau_
iii.push_back(1.0); // t_
iii.push_back(-cos_); // cos_
iii.push_back(sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_2.push_back(iii);
iii.clear();
};
if(tau_>0.0 && tau_<1.0){
iii.push_back(t_); // t_
iii.push_back(0.0); // tau_
iii.push_back(cos_); // cos_
iii.push_back(sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(t_); // t_
iii.push_back(1.0); // tau_
iii.push_back(-cos_); // cos_
iii.push_back(-sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(tau_); // tau_
iii.push_back(0.0); // t_
iii.push_back(cos_); // cos_
iii.push_back(-sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_2.push_back(iii);
iii.clear();
iii.push_back(tau_); // tau_
iii.push_back(1.0); // t_
iii.push_back(-cos_); // cos_
iii.push_back(sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_2.push_back(iii);
iii.clear();
};
if(tau_==1.0){
iii.push_back(t_); // t_
iii.push_back(1.0); // tau_
iii.push_back(-cos_); // cos_
iii.push_back(-sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(tau_); // tau_
iii.push_back(0.0); // t_
iii.push_back(cos_); // cos_
iii.push_back(-sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_2.push_back(iii);
iii.clear();
iii.push_back(tau_); // tau_
iii.push_back(1.0); // t_
iii.push_back(-cos_); // cos_
iii.push_back(sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_2.push_back(iii);
iii.clear();
};
if(tau_>1.0){ Jordano_flag_tau[1] = Jordano_flag_tau[1] + 1; };
};
if( t_==1.0 ){
if(tau_<0.0){ if(sin_>0.0) {Jordano_flag_tau[0] = Jordano_flag_tau[0] + 1;} };
if(tau_==0.0){
iii.push_back(t_); // t_
iii.push_back(0.0); // tau_
iii.push_back(cos_); // cos_
iii.push_back(sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(tau_); // tau_
iii.push_back(1.0); // t_
iii.push_back(-cos_); // cos_
iii.push_back(sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_2.push_back(iii);
iii.clear();
};
if(tau_>0.0 && tau_<1.0){
iii.push_back(t_); // t_
iii.push_back(0.0); // tau_
iii.push_back(cos_); // cos_
iii.push_back(sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(t_); // t_
iii.push_back(1.0); // tau_
iii.push_back(-cos_); // cos_
iii.push_back(-sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(tau_); // tau_
iii.push_back(1.0); // t_
iii.push_back(-cos_); // cos_
iii.push_back(sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_2.push_back(iii);
iii.clear();
};
if(tau_==1.0){
iii.push_back(t_); // t_
iii.push_back(1.0); // tau_
iii.push_back(-cos_); // cos_
iii.push_back(-sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(tau_); // tau_
iii.push_back(1.0); // t_
iii.push_back(-cos_); // cos_
iii.push_back(sin_); // sin_
iii.push_back(x_); // x_
iii.push_back(y_); // y_
output_add_array_2.push_back(iii);
iii.clear();
};
if(tau_>1.0){ if(sin_>0.0) {Jordano_flag_tau[1] = Jordano_flag_tau[1] + 1;} };
};
if( t_>1.0 ){
if(tau_==0.0){ if(sin_>0.0) {Jordano_flag_t[1] = Jordano_flag_t[1] + 1;} };
if(tau_>0.0 && tau_<1.0){ Jordano_flag_t[1] = Jordano_flag_t[1] + 1; };
if(tau_==1.0){ if(-sin_>0.0) {Jordano_flag_t[1] = Jordano_flag_t[1] + 1;} };
};
} else {
if(input_array.size()== 4){
double t0 = input_array[0][0]; //0
double tau0 = input_array[0][1];
double t1 = input_array[1][0]; //1
double tau1 = input_array[1][1];
double t2 = input_array[2][0];
double tau2 = input_array[2][1]; //0
double t3 = input_array[3][0];
double tau3 = input_array[3][1]; //1
int num_aad = 0;
if (tau0>=0.0 && tau0 <=1.0){ //t = 0
num_aad = num_aad + 1;
if ( tau0 == 0.0 ){
iii.push_back(0.0); // t_
iii.push_back(0.0); // tau_
iii.push_back(input_array[0][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[0][4]); // x_
iii.push_back(input_array[0][5]); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(0.0); // tau_
iii.push_back(0.0); // t_
iii.push_back(input_array[0][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[0][4]); // x_
iii.push_back(input_array[0][5]); // y_
output_add_array_2.push_back(iii);
iii.clear();
};
if ( tau0>0.0 && tau0 <1.0 ){
iii.push_back(0.0); // t_
iii.push_back(0.0); // tau_
iii.push_back(input_array[0][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[0][4]); // x_
iii.push_back(input_array[0][5]); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(0.0); // t_
iii.push_back(1.0); // tau_
iii.push_back(-input_array[0][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[0][4]); // x_
iii.push_back(input_array[0][5]); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(input_array[0][1]); // tau_
iii.push_back(0.0); // t_
iii.push_back(input_array[0][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[0][4]); // x_
iii.push_back(input_array[0][5]); // y_
output_add_array_2.push_back(iii);
iii.clear();
};
if ( tau0 == 1.0 ){
iii.push_back(0.0); // t_
iii.push_back(1.0); // tau_
iii.push_back(-input_array[0][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[0][4]); // x_
iii.push_back(input_array[0][5]); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(1.0); // tau_
iii.push_back(0.0); // t_
iii.push_back(input_array[0][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[0][4]); // x_
iii.push_back(input_array[0][5]); // y_
output_add_array_2.push_back(iii);
iii.clear();
};
};
if (tau1>=0.0 && tau1 <=1.0){
num_aad = num_aad + 1;
if(tau1 == 0.0){
iii.push_back(1.0); // t_
iii.push_back(0.0); // tau_
iii.push_back(input_array[1][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[1][4]); // x_
iii.push_back(input_array[1][5]); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(0.0); // tau_
iii.push_back(1.0); // t_
iii.push_back(-input_array[1][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[1][4]); // x_
iii.push_back(input_array[1][5]); // y_
output_add_array_2.push_back(iii);
iii.clear();
};
if(tau1>0.0 && tau1<1.0){
iii.push_back(1.0); // t_
iii.push_back(0.0); // tau_
iii.push_back(input_array[1][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[1][4]); // x_
iii.push_back(input_array[1][5]); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(1.0); // t_
iii.push_back(1.0); // tau_
iii.push_back(-input_array[1][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[1][4]); // x_
iii.push_back(input_array[1][5]); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(input_array[1][1]); // tau_
iii.push_back(1.0); // t_
iii.push_back(-input_array[1][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[1][4]); // x_
iii.push_back(input_array[1][5]); // y_
output_add_array_2.push_back(iii);
iii.clear();};
if(tau1 == 1.0){
iii.push_back(1.0); // t_
iii.push_back(1.0); // tau_
iii.push_back(-input_array[1][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[1][4]); // x_
iii.push_back(input_array[1][5]); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(1.0); // tau_
iii.push_back(1.0); // t_
iii.push_back(-input_array[1][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[1][4]); // x_
iii.push_back(input_array[1][5]); // y_
output_add_array_2.push_back(iii);
iii.clear();};
};
if (t2 >=0.0 && t2 <=1.0 && num_aad<2){
if(t2 != t0 || tau2 != tau0){
if(t2 != t1 || tau2 != tau1){
num_aad = num_aad + 1;
if(t2 == 0.0){
iii.push_back(0.0); // t_
iii.push_back(0.0); // tau_ = 0
iii.push_back(input_array[2][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[2][4]); // x_
iii.push_back(input_array[2][5]); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(0.0); // tau_ = 0
iii.push_back(0.0); // t_
iii.push_back(input_array[2][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[2][4]); // x_
iii.push_back(input_array[2][5]); // y_
output_add_array_2.push_back(iii);
iii.clear();
};
if(t2>0.0 && t2<1.0){
iii.push_back(input_array[2][0]); // t_
iii.push_back(0.0); // tau_ = 0
iii.push_back(input_array[2][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[2][4]); // x_
iii.push_back(input_array[2][5]); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(0.0); // tau_ = 0
iii.push_back(0.0); // t_
iii.push_back(input_array[2][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[2][4]); // x_
iii.push_back(input_array[2][5]); // y_
output_add_array_2.push_back(iii);
iii.clear();
iii.push_back(0.0); // tau_ = 0
iii.push_back(1.0); // t_
iii.push_back(-input_array[2][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[2][4]); // x_
iii.push_back(input_array[2][5]); // y_
output_add_array_2.push_back(iii);
iii.clear();
};
if(t2 == 1.0){
iii.push_back(input_array[2][0]); // t_
iii.push_back(0.0); // tau_ = 0
iii.push_back(input_array[2][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[2][4]); // x_
iii.push_back(input_array[2][5]); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(0.0); // tau_ = 0
iii.push_back(1.0); // t_
iii.push_back(-input_array[2][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[2][4]); // x_
iii.push_back(input_array[2][5]); // y_
output_add_array_2.push_back(iii);
iii.clear();
};
};
};
};
if (t3>=0.0 && t3 <=1.0 && num_aad<2){
if(t3 != t0 || tau3 != tau0){
if(t3 != t1 || tau3 != tau1){
if(t3 == 0.0){
iii.push_back(0.0); // t_
iii.push_back(1.0); // tau_
iii.push_back(-input_array[3][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[3][4]); // x_
iii.push_back(input_array[3][5]); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(1.0); // tau_
iii.push_back(0.0); // t_
iii.push_back(input_array[3][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[3][4]); // x_
iii.push_back(input_array[3][5]); // y_
output_add_array_2.push_back(iii);
iii.clear();
};
if(t3>0.0 && t3<1.0){
iii.push_back(input_array[3][0]); // t_
iii.push_back(1.0); // tau_
iii.push_back(-input_array[3][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[3][4]); // x_
iii.push_back(input_array[3][5]); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(1.0); // tau_
iii.push_back(0.0); // t_
iii.push_back(input_array[3][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[3][4]); // x_
iii.push_back(input_array[3][5]); // y_
output_add_array_2.push_back(iii);
iii.clear();
iii.push_back(1.0); // tau_
iii.push_back(1.0); // t_
iii.push_back(-input_array[3][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[3][4]); // x_
iii.push_back(input_array[3][5]); // y_
output_add_array_2.push_back(iii);
iii.clear();
};
if(t3 == 1.0){
iii.push_back(1.0); // t_
iii.push_back(1.0); // tau_
iii.push_back(-input_array[3][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[3][4]); // x_
iii.push_back(input_array[3][5]); // y_
output_add_array_1.push_back(iii);
iii.clear();
iii.push_back(1.0); // tau_
iii.push_back(1.0); // t_
iii.push_back(-input_array[3][2]); // cos_
iii.push_back(0.0); // sin_
iii.push_back(input_array[3][4]); // x_
iii.push_back(input_array[3][5]); // y_
output_add_array_2.push_back(iii);
iii.clear();
};
};
};
};
}
};
};
std::vector> give_spirit_tau(std::vector> segment,
std::vector> his,
std::array Jordano,
double tau_point){
std::vector> spirit;
std::vector> analize_tmp;
std::vector io;
double x0 = segment[0][0];
double y0 = segment[0][1];
double x1 = segment[1][0];
double y1 = segment[1][1];
int left_N = Jordano[0]%2;
int right_N = Jordano[1]%2;
double x_tmp;
double y_tmp;
double parameter_tmp;
int i_min;
int i_max;
double cos_a;
double sin_a;
double max_a;
double min_a;
double tmp;
double left_light ;
double right_light;
std::sort(begin(his), end(his));
parameter_tmp = his[0][0];
if (parameter_tmp > 0.0){
io.push_back(left_N);
io.push_back(x0);
io.push_back(y0);
io.push_back(left_N);
spirit.push_back(io);
io.clear();
};
for ( int m = 0; m max_a ){
max_a = tmp;
i_max = d;
};
if ( tmp < min_a ){
min_a = tmp;
i_min = d;
};
};
x_tmp = analize_tmp[0][3];
y_tmp = analize_tmp[0][4];
left_light = 1.0;
if ( (analize_tmp[i_min][0]==1.0 && analize_tmp[i_min][2]>0)
|| (analize_tmp[i_min][0]==0.0 && analize_tmp[i_min][2]<0) )
{left_light = 0.0;};
if ( analize_tmp[i_min][0] == 1.0 && analize_tmp[i_min][2] == 0.0 )
{left_light = 0.0;};
right_light = 1.0;
if ( (analize_tmp[i_max][0]==0.0 && analize_tmp[i_max][2]>0)
|| (analize_tmp[i_max][0]==1.0 && analize_tmp[i_max][2]<0) )
{right_light = 0.0;};
if ( analize_tmp[i_max][0] == 0.0 && analize_tmp[i_max][2] == 0.0 )
{right_light = 0.0;};
io.push_back(left_light);
io.push_back(x_tmp);
io.push_back(y_tmp);
io.push_back(right_light);
spirit.push_back(io);
io.clear();
analize_tmp.clear();
};
};
i_min = 0;
i_max = 0;
cos_a = analize_tmp[0][1];
sin_a = analize_tmp[0][2];
max_a = cos_a/sqrt(pow(cos_a,2)+pow(sin_a,2)) ;
min_a = max_a;
for (int d=1; d max_a ){
max_a = tmp;
i_max = d;
};
if ( tmp < min_a ){
min_a = tmp;
i_min = d;
};
};
x_tmp = analize_tmp[0][3];
y_tmp = analize_tmp[0][4];
left_light = 1.0;
if ( (analize_tmp[i_min][0]==1.0 && analize_tmp[i_min][2]>0.0)
|| (analize_tmp[i_min][0]==0.0 && analize_tmp[i_min][2]<0.0) )
{left_light = 0.0;};
if ( analize_tmp[i_min][0] == 1.0 && analize_tmp[i_min][2] == 0.0 )
{left_light = 0.0;};
right_light = 1.0;
if ( (analize_tmp[i_max][0]==0.0 && analize_tmp[i_max][2]>0)
|| (analize_tmp[i_max][0]==1.0 && analize_tmp[i_max][2]<0) )
{right_light = 0.0;};
if ( analize_tmp[i_max][0] == 0.0 && analize_tmp[i_max][2] == 0.0 )
{right_light = 0.0;};
io.push_back(left_light);
io.push_back(x_tmp);
io.push_back(y_tmp);
io.push_back(right_light);
spirit.push_back(io);
io.clear();
analize_tmp.clear();
parameter_tmp = his[his.size()-1][0];
if (parameter_tmp < 1.0){
io.push_back(right_N);
io.push_back(x1);
io.push_back(y1);
io.push_back(right_N);
spirit.push_back(io);
io.clear();
};
return spirit;
};
std::vector> give_spirit_t(std::vector> segment,
std::vector> his,
std::array Jordano,
double tau_point){
std::vector> spirit;
std::vector> analize_tmp;
std::vector io;
double x0 = segment[0][0];
double y0 = segment[0][1];
double x1 = segment[1][0];
double y1 = segment[1][1];
int left_N = Jordano[0]%2;
int right_N = Jordano[1]%2;
double x_tmp;
double y_tmp;
double parameter_tmp;
int i_min;
int i_max;
double cos_a;
double sin_a;
double max_a;
double min_a;
double tmp;
double left_light ;
double right_light;
std::sort(begin(his), end(his));
parameter_tmp = his[0][0];
if (parameter_tmp > 0.0){
io.push_back(left_N);
io.push_back(x0);
io.push_back(y0);
io.push_back(left_N);
spirit.push_back(io);
io.clear();
};
for ( int m = 0; m max_a ){
max_a = tmp;
i_max = d;
};
if ( tmp < min_a ){
min_a = tmp;
i_min = d;
};
};
x_tmp = analize_tmp[0][3];
y_tmp = analize_tmp[0][4];
left_light = 1.0;
if ( (analize_tmp[i_min][0]==1.0 && analize_tmp[i_min][2]>0)
|| (analize_tmp[i_min][0]==0.0 && analize_tmp[i_min][2]<0) )
{left_light = 0.0;};
right_light = 1.0;
if ( (analize_tmp[i_max][0]==0.0 && analize_tmp[i_max][2]>0)
|| (analize_tmp[i_max][0]==1.0 && analize_tmp[i_max][2]<0) )
{right_light = 0.0;};
io.push_back(left_light);
io.push_back(x_tmp);
io.push_back(y_tmp);
io.push_back(right_light);
spirit.push_back(io);
io.clear();
analize_tmp.clear();
};
};
i_min = 0;
i_max = 0;
cos_a = analize_tmp[0][1];
sin_a = analize_tmp[0][2];
max_a = cos_a/sqrt(pow(cos_a,2)+pow(sin_a,2)) ;
min_a = max_a;
for (int d=1; d max_a ){
max_a = tmp;
i_max = d;
};
if ( tmp < min_a ){
min_a = tmp;
i_min = d;
};
};
x_tmp = analize_tmp[0][3];
y_tmp = analize_tmp[0][4];
left_light = 1.0;
if ( (analize_tmp[i_min][0]==1.0 && analize_tmp[i_min][2]>0) || (analize_tmp[i_min][0]==0.0 && analize_tmp[i_min][2]<0) )
{left_light = 0.0;};
right_light = 1.0;
if ((analize_tmp[i_max][0]==0.0 && analize_tmp[i_max][2]>0) || (analize_tmp[i_max][0]==1.0 && analize_tmp[i_max][2]<0))
{right_light = 0.0;};
io.push_back(left_light);
io.push_back(x_tmp);
io.push_back(y_tmp);
io.push_back(right_light);
spirit.push_back(io);
io.clear();
analize_tmp.clear();
parameter_tmp = his[his.size()-1][0];
if (parameter_tmp < 1.0){
io.push_back(right_N);
io.push_back(x1);
io.push_back(y1);
io.push_back(right_N);
spirit.push_back(io);
io.clear();
};
return spirit;
};
std::vector> add_triangle (std::vector> shad,
std::vector triangle_shad,
double r_point){
std::vector> merge_shadow;
merge_shadow.clear();
std::vector> spirit;
std::vector shad_el;
double x0 = triangle_shad[0];
double y0 = triangle_shad[1];
double x1 = triangle_shad[2];
double y1 = triangle_shad[3];
double x2 = triangle_shad[4];
double y2 = triangle_shad[5];
double x0_;
double y0_;
double x1_;
double y1_;
if(shad.size() == 0 ){
shad_el.push_back(x0);
shad_el.push_back(y0);
shad_el.push_back(x1);
shad_el.push_back(y1);
merge_shadow.push_back(shad_el);
shad_el.clear();
shad_el.push_back(x1);
shad_el.push_back(y1);
shad_el.push_back(x2);
shad_el.push_back(y2);
merge_shadow.push_back(shad_el);
shad_el.clear();
shad_el.push_back(x2);
shad_el.push_back(y2);
shad_el.push_back(x0);
shad_el.push_back(y0);
merge_shadow.push_back(shad_el);
shad_el.clear();
} else {
double t1_point = r_point/(sqrt(pow((x1-x0),2) + pow((y1 - y0),2)));
double t2_point = r_point/(sqrt(pow((x2-x1),2) + pow((y2 - y1),2)));
double t3_point = r_point/(sqrt(pow((x0-x2),2) + pow((y0 - y2),2)));
double u0;
double v0;
double u1;
double v1;
std::vector point1_t;
std::vector point2_t;
std::vector point3_t;
std::vector> segment1_t;
std::vector> segment2_t;
std::vector> segment3_t;
std::vector point1_tau;
std::vector point2_tau;
std::vector> segment4_tau;
std::vector> vector_tmp;
std::vector> his_1t;
std::vector> his_2t;
std::vector> his_3t;
std::vector> his_tau;
std::vector io;
std::array Jordano_t1;
std::array Jordano_t2;
std::array Jordano_t3;
std::array Jordano_tau;
Jordano_t1[0] = 0;
Jordano_t1[1] = 0;
Jordano_t2[0] = 0;
Jordano_t2[1] = 0;
Jordano_t3[0] = 0;
Jordano_t3[1] = 0;
Jordano_tau[0] = 0;
Jordano_tau[1] = 0;
point1_t.clear();
point1_t.push_back(x0);
point1_t.push_back(y0);
point2_t.clear();
point2_t.push_back(x1);
point2_t.push_back(y1);
point3_t.clear();
point3_t.push_back(x2);
point3_t.push_back(y2);
segment1_t.clear();
segment1_t.push_back(point1_t);
segment1_t.push_back(point2_t);
segment2_t.clear();
segment2_t.push_back(point2_t);
segment2_t.push_back(point3_t);
segment3_t.clear();
segment3_t.push_back(point3_t);
segment3_t.push_back(point1_t);
his_1t.clear();
his_2t.clear();
his_3t.clear();
Jordano_t1[0] = 0;
Jordano_t1[1] = 0;
Jordano_t2[0] = 0;
Jordano_t2[1] = 0;
Jordano_t3[0] = 0;
Jordano_t3[1] = 0;
if(interval_point_point(segment1_t[0][0],segment1_t[0][1],segment1_t[1][0],segment1_t[1][1])>r_point &&
interval_point_point(segment2_t[0][0],segment2_t[0][1],segment2_t[1][0],segment2_t[1][1])>r_point &&
interval_point_point(segment3_t[0][0],segment3_t[0][1],segment3_t[1][0],segment3_t[1][1])>r_point)
{
for (int k = 0; k< shad.size(); k++){
u0 = shad[k][0];
v0 = shad[k][1];
u1 = shad[k][2];
v1 = shad[k][3];
double tau_point = r_point/(sqrt(pow((u1-u0),2) + pow((v1 - v0),2)));
point1_tau.clear();
point1_tau.push_back(u0);
point1_tau.push_back(v0);
point2_tau.clear();
point2_tau.push_back(u1);
point2_tau.push_back(v1);
segment4_tau.clear();
segment4_tau.push_back(point1_tau);
segment4_tau.push_back(point2_tau);
his_tau.clear();
Jordano_tau[0] = 0;
Jordano_tau[1] = 0;
vector_tmp.clear();
vector_tmp = segments_intersection_point(segment1_t,segment4_tau,r_point);
two_histories(vector_tmp,his_1t,his_tau,Jordano_t1,Jordano_tau);
vector_tmp.clear();
vector_tmp = segments_intersection_point(segment2_t,segment4_tau,r_point);
two_histories(vector_tmp,his_2t,his_tau,Jordano_t2,Jordano_tau);
vector_tmp.clear();
vector_tmp = segments_intersection_point(segment3_t,segment4_tau,r_point);
two_histories(vector_tmp,his_3t,his_tau,Jordano_t3,Jordano_tau);
if (his_tau.size()==0){
if (Jordano_tau[0]%2 == 0){
shad_el.push_back(u0);
shad_el.push_back(v0);
shad_el.push_back(u1);
shad_el.push_back(v1);
merge_shadow.push_back(shad_el);
shad_el.clear();
};
} else {
spirit.clear();
spirit = give_spirit_tau(segment4_tau,his_tau,Jordano_tau,tau_point);
for(int q = 1; q triangle_shadow;
triangle_shadow.clear();
triangle_shadow.push_back(1.0); //x1 (0.0)
triangle_shadow.push_back(0.0); //y1 (0.0)
triangle_shadow.push_back(1.0); //x2 (1.0)
triangle_shadow.push_back(1.0); //y2 (0.0)
triangle_shadow.push_back(0.0); //x3 (0.0)
triangle_shadow.push_back(1.0); //y3 (1.0)
std::vector> shadow;
shadow.clear();
std::vector shadow_element;
shadow_element.push_back(0.0); //u0 (0.0 );
shadow_element.push_back(0.0); //v0 (-0.5);
shadow_element.push_back(1.0); //u1 (0.5);
shadow_element.push_back(0.0); //v1 (0.0);
shadow.push_back(shadow_element);
shadow_element.clear();
shadow_element.push_back(1.0); //u0 (0.5);
shadow_element.push_back(0.0); //v0 (0.0);
shadow_element.push_back(0.0); //u1 (-0.5);
shadow_element.push_back(1.0); //v1 (0.0 );
shadow.push_back(shadow_element);
shadow_element.clear();
shadow_element.push_back(0.0); //u0 (-0.5);
shadow_element.push_back(1.0); //v0 (0.0 );
shadow_element.push_back(0.0); //u1 (0.0 );
shadow_element.push_back(0.0); //v1 (-0.5);
shadow.push_back(shadow_element);
shadow_element.clear();
// shadow.clear();
std::vector> rez_of_merge;
rez_of_merge = add_triangle(shadow,triangle_shadow,r_point);
if (rez_of_merge.size()>0){
std::cout<< "rez_of_merge" <
© Habrahabr.ru