Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2016, 14:46   #1
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию Закрасить область пересечения двух окружностей

Добрый день. На графике координат есть две две пересекающиеся окружности, мне нужно найти область пересечения и ее закрасить.Подскажите пожалуйста, возможно есть какие-то специальные методы нахождения области пересечения или алгоритмы.
В программе происходят такие этапы:
1. Рисуется график координат:
Код:
            
    private: System::Void panel1_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e) {
                  g = panel1->CreateGraphics(); // создаем место для рисования
        
     blackPen = gcnew Pen( Color::Black,3.0f );
       Pen ^penCO = gcnew Pen(Color::Green, 5.F);       
        g->DrawLine(penCO, Point(330, -5000), Point(330, 5000));//ось у
          g->DrawLine(penCO,  Point(-5000, 200), Point(5000, 200));//ось х
          
         /* g->TranslateTransform(3200, 200); // смещение начала координат (в пикселях)
           g->RotateTransform(180.0F);
           g->ScaleTransform(7.0F, 7.0F);*/
 
 
            List<Point> p = gcnew List<Point>(); // список точек графика
 
             Pen ^pen = gcnew Pen(Color::DarkRed,0.5F); // перо, для отрисовки графика
             Pen ^gridPen = gcnew Pen(Color::DeepPink, 0.0001F); //перо для отрисовки координатной сетки
            
             System::Drawing::Font ^fo = gcnew System::Drawing::Font(FontFamily::GenericSerif,3.F); //шрифт для выведения 
 
 
            // рисуем координатную сетку
           int x = 0; //начальное значение координаты х. Постороение идет из указанной точки
            int y = -100; // начальное значение координаты у. Пояснение см выше.
            
        
            while (x <= 700) //конечное значение координаты х. Бесконечное количество линий нам не надо, ибо никакой памяти не хватит
            {
                x = x + 15; // шаг линий, параллельных оси ОУ
                y = y + 15; //шаг линий, параллельных оси ОХ
                g->DrawLine(gridPen, Point(x, -1000),  Point(x, 1000)); // рисуем линии, параллельные оси ОУ
                g->DrawLine(gridPen, Point(-700, y),  Point(700, y)); //рисуем линии, параллельные оси ОХ
 
            }
     }
Потом по нажатию кнопки рисуется первая окружность:
Код:
 private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
             {
                a=0;b=0;c=200;d=200;
         circle ^B=gcnew circle();
 
           rect = Rectangle(a,b,c,d);
        
                 panel1->Refresh();
            g->DrawEllipse(blackPen, rect ); //1 параметр-ось х,2-у
        
                
             }
Дальше по нажатию кнопки рисуется вторая окружность (+по еще рисуется окружность, в которую входят две раннее нарисованные окружности)

Код:
private: System::Void button8_Click(System::Object^  sender, System::EventArgs^  e) {
 
                String ^s1;
                s1 = textBox1->Text; 
                Int32 x1=Convert::ToInt32(s1);
 
                String ^s2;
                s2 = textBox2->Text; 
                Int32 x2=Convert::ToInt32(s2);
                
                
                String ^s3;
                s3 = textBox3->Text; 
                Int32 x3=Convert::ToInt32(s3);
                x3*=2;
                //a=0;b=0;c=200;d=200;
                int a1=a+15; 
                int b1=b-30;
                int d1=c-20;
 
                    this->textBox1->AppendText(b.ToString());
 
                 // g->DrawEllipse(blackPen, a,b, c, d);
 
                  Pen^ blackPen2 = gcnew Pen( Color::Green,3.0f );
              g->DrawEllipse(blackPen2, a1,b1, d1, d1);
              int new_a=0;int new_b=0;
              int new_s=0;
              if(a<a1&&b<=b1) //a1=a+10  b1=b+30; (15<a1<90)(b<b1<70)
              {
                 new_a=a-16;
               new_s=((a1+d1)-a)+50;
                // new_s=((a1+d1)+(a1-a));
                 new_b=b-15;
              }
              else if(a>a1&&b>b1) // a1=a-35; b1=b-30; <a1<55
              {
                      new_a=a1-16;
                       new_b=b1-17;
                       new_s=((a+d)-a1)+50;
              }
             
              
              else if(a<a1&&b>b1) //a+15; b-15
              {
                      new_a=a1-25;
                       new_b=b1;
                       new_s=((a+d)-a1)+50;
              }
        
              
               Pen^ blackPen1 = gcnew Pen( Color::Blue,3.0f );
 
                g->DrawEllipse(blackPen1, new_a,new_b, new_s, new_s);
            
                if(a<a1&&b>b1) 
                {
                    //for(int i=)
                    g->DrawLine(blackPen1, a1,b, a1+d1, b1+d1); 
                }
              // panel1->Refresh();
         }
Как имея все это, можно найти область пересечения этих двух первых окружностей и зарисовать найденную область? Спасибо
Вероника99 вне форума Ответить с цитированием
Старый 22.10.2016, 21:01   #2
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Не подскажите?((
Вероника99 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На экране две разноцветные фигуры круг и квадрат пересекаются. Как закрасить место пересечения? Ronin94 HTML и CSS 0 08.02.2015 15:56
Помогите закрасить область графика chart SonnyWalker Windows Forms 0 25.04.2014 12:06
Нахождение пересечений двух окружностей Hemul Помощь студентам 6 02.11.2011 16:58
Закрасить область badaladanbad Win Api 3 20.04.2011 17:05
Площадь пересечения двух фигур Marsel737 Общие вопросы Delphi 4 04.09.2010 20:38