Example #1
0
        private List <Rectangle> Start(List <Rectangle> rect, int i) //Додумать
        {
            PointInRect pir = Diagonal(rect[i].x1, rect[i].y1, rect[i].x2, rect[i].y2);
            PointInRect tmp = new PointInRect();

            rect.Add(new Rectangle());
            tmp.SetPoint(rect[i].x1, rect[i].y1);
            rect[rect.Count - 1].CreatRectangle(tmp, pir);
            rect.Add(new Rectangle());
            rect[rect.Count - 1].CreatRectangle(pir.x, rect[i].y1, rect[i].x2, pir.y);
            rect.Add(new Rectangle());
            rect[rect.Count - 1].CreatRectangle(rect[i].x1, pir.y, pir.x, rect[i].y2);
            rect.Add(new Rectangle());
            tmp.SetPoint(rect[i].x2, rect[i].y2);
            rect[rect.Count - 1].CreatRectangle(pir, tmp);
            //rect.RemoveAt(i);
            return(rect);
        }
Example #2
0
 public void CreatRectangle(PointInRect p1, PointInRect p2) { this.p1 = p1; this.p2 = p2; }
Example #3
0
        private PointInRect Diagonal(double x1, double y1, double x2, double y2) //ДОДУМАТЬ!!!!!!!
        {
            PointInRect PIR = new PointInRect();

            if (this.parametr.x2_x1_max != this.parametr.x2_x1_min) //область не является прямой
            {
                if (((x1 / y1) <= this.parametr.x2_x1_max)) // левый нижний угол ниже верхнего коэф-та компр.
                {
                    if (((x1 / y1) >= this.parametr.x2_x1_min)) // левый нижний угол выше нижнего коэф-та компр.
                    {
                        if (((x2 / y2) <= this.parametr.x2_x1_max)) // правый верхний угол ниже верхнего коэф-та компр.
                        {
                            if (((x2 / y2) >= this.parametr.x2_x1_min)) // правый верхний угол выше нижнего коэф-та компр.
                            {
                                //DiagonalX1Y1ToX2Y2Good(x1, y1, x2, y2); 
                                // вся диагональ внутри области
                                PIR.x = rnd.NextDouble() * (x2 - x1) + x1;
                                PIR.y = (x1 * y2 - x2 * y1 + (y1 - y2) * PIR.x) / (x1 - x2);
                            }
                            else
                            {
                                // Правый верхний угол ниже области
                                double tmpX2 = (x1 * y2 - x2 * y1) / ((x1 - x2) * this.parametr.x2_x1_min + y2 - y1);
                                double tmpY2 = tmpX2 * this.parametr.x2_x1_min;
                                PIR.x = rnd.NextDouble() * (tmpX2 - x1) + x1;
                                PIR.y = (x1 * tmpY2 - tmpX2 * y1 + (y1 - tmpY2) * PIR.x) / (x1 - tmpX2);
                            }
                        }
                        else
                        {
                            if (((x2 / y2) >= this.parametr.x2_x1_min))
                            {
                                // Правый верхний угол выше области
                                double tmpX2 = (x1 * y2 - x2 * y1) / ((x1 - x2) * this.parametr.x2_x1_max + y2 - y1);
                                double tmpY2 = tmpX2 * this.parametr.x2_x1_max;
                                PIR.x = rnd.NextDouble() * (tmpX2 - x1) + x1;
                                PIR.y = (x1 * tmpY2 - tmpX2 * y1 + (y1 - tmpY2) * PIR.x) / (x1 - tmpX2);
                            }
                            else
                            {
                                // Всё плохо
                            }
                        }
                    }
                    else
                    {
                        if (((x2 / y2) <= this.parametr.x2_x1_max))
                        {
                            if (((x2 / y2) >= this.parametr.x2_x1_min))
                            {
                                // нижний левый угол вне области
                                // Левый нижний угол ниже области
                                double tmpX1 = (x1 * y2 - x2 * y1) / ((x1 - x2) * this.parametr.x2_x1_min + y2 - y1);
                                double tmpY1 = tmpX1 * this.parametr.x2_x1_min;
                                PIR.x = rnd.NextDouble() * (x2 - tmpX1) + tmpX1;
                                PIR.y = (tmpX1 * y2 - x2 * tmpY1 + (tmpY1 - y2) * PIR.x) / (tmpX1 - x2);
                            }
                            else
                            {   // все плохо может быть
                                if (((x1 / y2) >= this.parametr.x2_x1_min) && ((x1 / y2) <= this.parametr.x2_x1_min))
                                {

                                    // нижний левый угол вне области
                                    // Левый нижний угол выше области
                                    double tmpX1 = (x1 * y2 - x2 * y1) / ((x1 - x2) * this.parametr.x2_x1_min + y2 - y1);
                                    double tmpY1 = tmpX1 * this.parametr.x2_x1_min;
                                    double tmpX2 = (x1 * y2 - x2 * y1) / ((x1 - x2) * this.parametr.x2_x1_min + y2 - y1);
                                    double tmpY2 = tmpX2 * this.parametr.x2_x1_min;
                                    PIR.x = rnd.NextDouble() * (tmpX2 - tmpX1) + tmpX1;
                                    PIR.y = (tmpX1 * tmpY2 - tmpX2 * tmpY1 + (tmpY1 - tmpY2) * PIR.x) / (tmpX1 - tmpX2);
                                }
                                else
                                {
                                    // Всё плохо
                                }
                            }
                        }
                        else
                        {
                            if (((x2 / y2) >= this.parametr.x2_x1_min))
                            {

                            }
                            else
                            {

                            }
                        }
                    }
                }
                else if (((x1 / y1) >= this.parametr.x2_x1_min))
                {
                    if (((x2 / y2) <= this.parametr.x2_x1_max))
                    {
                        if (((x2 / y2) >= this.parametr.x2_x1_min))
                        {
                            // нижний левый угол вне области
                            // Левый нижний угол выше области
                            double tmpX1 = (x1 * y2 - x2 * y1) / ((x1 - x2) * this.parametr.x2_x1_max + y2 - y1);
                            double tmpY1 = tmpX1 * this.parametr.x2_x1_max;
                            PIR.x = rnd.NextDouble() * (x2 - tmpX1) + tmpX1;
                            PIR.y = (tmpX1 * y2 - x2 * tmpY1 + (tmpY1 - y2) * PIR.x) / (tmpX1 - x2);
                        }
                        else
                        {
                            // нижний левый угол вне области
                            // Левый нижний угол выше области
                            double tmpX1 = (x1 * y2 - x2 * y1) / ((x1 - x2) * this.parametr.x2_x1_max + y2 - y1);
                            double tmpY1 = tmpX1 * this.parametr.x2_x1_max;
                            double tmpX2 = (x1 * y2 - x2 * y1) / ((x1 - x2) * this.parametr.x2_x1_min + y2 - y1);
                            double tmpY2 = tmpX2 * this.parametr.x2_x1_min;
                            PIR.x = rnd.NextDouble() * (tmpX2 - tmpX1) + tmpX1;
                            PIR.y = (tmpX1 * tmpY2 - tmpX2 * tmpY1 + (tmpY1 - tmpY2) * PIR.x) / (tmpX1 - tmpX2);
                        }
                    }
                    else
                    {
                        if (((x2 / y2) >= this.parametr.x2_x1_min))
                        {

                        }
                        else
                        {

                        }
                    }
                }
                else
                {
                    // Всё очень плохо
                    if (((x2 / y2) <= this.parametr.x2_x1_max))
                    {
                        if (((x2 / y2) >= this.parametr.x2_x1_min))
                        {

                        }
                        else
                        {

                        }
                    }
                    else
                    {
                        if (((x2 / y2) >= this.parametr.x2_x1_min))
                        {

                        }
                        else
                        {

                        }
                    }
                }
            }
            else // область является прямой
            {

            }
            PIR.cost = Function(PIR.x, PIR.y);
            return PIR;
        }
Example #4
0
 private List<Rectangle> Start(List<Rectangle> rect, int i) //Додумать
 {
     PointInRect pir = Diagonal(rect[i].x1, rect[i].y1, rect[i].x2, rect[i].y2);
     PointInRect tmp = new PointInRect();
     rect.Add(new Rectangle());
     tmp.SetPoint(rect[i].x1, rect[i].y1);
     rect[rect.Count - 1].CreatRectangle(tmp, pir);
     rect.Add(new Rectangle());
     rect[rect.Count - 1].CreatRectangle(pir.x, rect[i].y1, rect[i].x2, pir.y);
     rect.Add(new Rectangle());
     rect[rect.Count - 1].CreatRectangle(rect[i].x1, pir.y, pir.x, rect[i].y2);
     rect.Add(new Rectangle());
     tmp.SetPoint(rect[i].x2, rect[i].y2);
     rect[rect.Count - 1].CreatRectangle(pir, tmp);
     //rect.RemoveAt(i);
     return rect;
 }
Example #5
0
 public void CreatRectangle(PointInRect p1, PointInRect p2)
 {
     this.p1 = p1; this.p2 = p2;
 }
Example #6
0
        private PointInRect Diagonal(double x1, double y1, double x2, double y2) //ДОДУМАТЬ!!!!!!!
        {
            PointInRect PIR = new PointInRect();

            if (this.parametr.x2_x1_max != this.parametr.x2_x1_min)     //область не является прямой
            {
                if (((x1 / y1) <= this.parametr.x2_x1_max))             // левый нижний угол ниже верхнего коэф-та компр.
                {
                    if (((x1 / y1) >= this.parametr.x2_x1_min))         // левый нижний угол выше нижнего коэф-та компр.
                    {
                        if (((x2 / y2) <= this.parametr.x2_x1_max))     // правый верхний угол ниже верхнего коэф-та компр.
                        {
                            if (((x2 / y2) >= this.parametr.x2_x1_min)) // правый верхний угол выше нижнего коэф-та компр.
                            {
                                //DiagonalX1Y1ToX2Y2Good(x1, y1, x2, y2);
                                // вся диагональ внутри области
                                PIR.x = rnd.NextDouble() * (x2 - x1) + x1;
                                PIR.y = (x1 * y2 - x2 * y1 + (y1 - y2) * PIR.x) / (x1 - x2);
                            }
                            else
                            {
                                // Правый верхний угол ниже области
                                double tmpX2 = (x1 * y2 - x2 * y1) / ((x1 - x2) * this.parametr.x2_x1_min + y2 - y1);
                                double tmpY2 = tmpX2 * this.parametr.x2_x1_min;
                                PIR.x = rnd.NextDouble() * (tmpX2 - x1) + x1;
                                PIR.y = (x1 * tmpY2 - tmpX2 * y1 + (y1 - tmpY2) * PIR.x) / (x1 - tmpX2);
                            }
                        }
                        else
                        {
                            if (((x2 / y2) >= this.parametr.x2_x1_min))
                            {
                                // Правый верхний угол выше области
                                double tmpX2 = (x1 * y2 - x2 * y1) / ((x1 - x2) * this.parametr.x2_x1_max + y2 - y1);
                                double tmpY2 = tmpX2 * this.parametr.x2_x1_max;
                                PIR.x = rnd.NextDouble() * (tmpX2 - x1) + x1;
                                PIR.y = (x1 * tmpY2 - tmpX2 * y1 + (y1 - tmpY2) * PIR.x) / (x1 - tmpX2);
                            }
                            else
                            {
                                // Всё плохо
                            }
                        }
                    }
                    else
                    {
                        if (((x2 / y2) <= this.parametr.x2_x1_max))
                        {
                            if (((x2 / y2) >= this.parametr.x2_x1_min))
                            {
                                // нижний левый угол вне области
                                // Левый нижний угол ниже области
                                double tmpX1 = (x1 * y2 - x2 * y1) / ((x1 - x2) * this.parametr.x2_x1_min + y2 - y1);
                                double tmpY1 = tmpX1 * this.parametr.x2_x1_min;
                                PIR.x = rnd.NextDouble() * (x2 - tmpX1) + tmpX1;
                                PIR.y = (tmpX1 * y2 - x2 * tmpY1 + (tmpY1 - y2) * PIR.x) / (tmpX1 - x2);
                            }
                            else
                            {   // все плохо может быть
                                if (((x1 / y2) >= this.parametr.x2_x1_min) && ((x1 / y2) <= this.parametr.x2_x1_min))
                                {
                                    // нижний левый угол вне области
                                    // Левый нижний угол выше области
                                    double tmpX1 = (x1 * y2 - x2 * y1) / ((x1 - x2) * this.parametr.x2_x1_min + y2 - y1);
                                    double tmpY1 = tmpX1 * this.parametr.x2_x1_min;
                                    double tmpX2 = (x1 * y2 - x2 * y1) / ((x1 - x2) * this.parametr.x2_x1_min + y2 - y1);
                                    double tmpY2 = tmpX2 * this.parametr.x2_x1_min;
                                    PIR.x = rnd.NextDouble() * (tmpX2 - tmpX1) + tmpX1;
                                    PIR.y = (tmpX1 * tmpY2 - tmpX2 * tmpY1 + (tmpY1 - tmpY2) * PIR.x) / (tmpX1 - tmpX2);
                                }
                                else
                                {
                                    // Всё плохо
                                }
                            }
                        }
                        else
                        {
                            if (((x2 / y2) >= this.parametr.x2_x1_min))
                            {
                            }
                            else
                            {
                            }
                        }
                    }
                }
                else if (((x1 / y1) >= this.parametr.x2_x1_min))
                {
                    if (((x2 / y2) <= this.parametr.x2_x1_max))
                    {
                        if (((x2 / y2) >= this.parametr.x2_x1_min))
                        {
                            // нижний левый угол вне области
                            // Левый нижний угол выше области
                            double tmpX1 = (x1 * y2 - x2 * y1) / ((x1 - x2) * this.parametr.x2_x1_max + y2 - y1);
                            double tmpY1 = tmpX1 * this.parametr.x2_x1_max;
                            PIR.x = rnd.NextDouble() * (x2 - tmpX1) + tmpX1;
                            PIR.y = (tmpX1 * y2 - x2 * tmpY1 + (tmpY1 - y2) * PIR.x) / (tmpX1 - x2);
                        }
                        else
                        {
                            // нижний левый угол вне области
                            // Левый нижний угол выше области
                            double tmpX1 = (x1 * y2 - x2 * y1) / ((x1 - x2) * this.parametr.x2_x1_max + y2 - y1);
                            double tmpY1 = tmpX1 * this.parametr.x2_x1_max;
                            double tmpX2 = (x1 * y2 - x2 * y1) / ((x1 - x2) * this.parametr.x2_x1_min + y2 - y1);
                            double tmpY2 = tmpX2 * this.parametr.x2_x1_min;
                            PIR.x = rnd.NextDouble() * (tmpX2 - tmpX1) + tmpX1;
                            PIR.y = (tmpX1 * tmpY2 - tmpX2 * tmpY1 + (tmpY1 - tmpY2) * PIR.x) / (tmpX1 - tmpX2);
                        }
                    }
                    else
                    {
                        if (((x2 / y2) >= this.parametr.x2_x1_min))
                        {
                        }
                        else
                        {
                        }
                    }
                }
                else
                {
                    // Всё очень плохо
                    if (((x2 / y2) <= this.parametr.x2_x1_max))
                    {
                        if (((x2 / y2) >= this.parametr.x2_x1_min))
                        {
                        }
                        else
                        {
                        }
                    }
                    else
                    {
                        if (((x2 / y2) >= this.parametr.x2_x1_min))
                        {
                        }
                        else
                        {
                        }
                    }
                }
            }
            else // область является прямой
            {
            }
            PIR.cost = Function(PIR.x, PIR.y);
            return(PIR);
        }