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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2016, 18:59   #1
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию Метод для создания окружности, которая вмещает в себя две окружности

Добрый вечер. Подскажите пожалуйста, есть ли специальный метод, который может нарисовать минимальную окружность, которая вмещала бы в себя две окружности. Есть код, который рисует две окружности, зарисовывает область их пересещения, осталось нарисовать еще окружность, которая вмещала бы в себя две окружности. Спасибо
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private Figure fig1;
        private Figure fig2;
 
        public Form1()
        {
            InitializeComponent();
 
            fig1 = new Figure()
            { 
                FillColor = Color.Red 
            };
            fig1.Path.AddEllipse(new Rectangle(50, 0, 200, 200));
            fig2 = new Figure(){ FillColor = Color.Blue };
            fig2.Path.AddEllipse(new Rectangle(100, 100, 200, 200));
        }
 
       protected override void OnPaint(PaintEventArgs e)
        {
            using (var brush = new SolidBrush(Color.Wheat))
            {
                brush.Color = fig1.FillColor;
                e.Graphics.FillPath(brush, fig1.Path);
 
                brush.Color = fig2.FillColor;
                e.Graphics.FillPath(brush, fig2.Path);
            }
 
            using (var brush = new LinearGradientBrush(fig1.Center, fig2.Center, fig1.FillColor, fig2.FillColor))
            {
                var r = fig1.Region;
                r.Intersect(fig2.Region);
                e.Graphics.FillRegion(brush, r);
            }
        }
    }
 
    class Figure
    {
        public GraphicsPath Path = new GraphicsPath();
        public Color FillColor;
 
        public PointF Center
        {
            get
            {
                var rect = Path.GetBounds();
                return new PointF(rect.X + rect.Width / 2, rect.Y + rect.Height / 2);
            }
        }
 
        public Region Region
        {
            get { return new Region(Path); }
        }
    }
}
Вероника99 вне форума Ответить с цитированием
Старый 23.10.2016, 19:06   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

На бумаге - соединяешь центры прямой, отрезок образованный точками пересечения прямой с внешними сторонами окружностей делишь пополам и ой-ля-ля. В программе практически так же. Это все, если одна из окружностей не находится полностью внутри другой
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.10.2016, 20:02   #3
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Сначала показалось поняла...
1. Имея координаты центров двух окружностей: fig1 (х1=150, у1=100) fig2 (х2=200, у2=200)
Получаем координату центральной точки (175; 150). А что дальше, как именно найти диаметр большой окружности? Я сначала думала, делать условия проверки, типа если х1>x2&&y1>y2 ,то одно решение, если х1>x2&&y1<y2, то другие расчеты диаметра. Но возможно есть более универсальный вариант?
Вероника99 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа на Delphi . Помогите пожалуйста..! Нужно нарисовать две окружности... Asyyy Помощь студентам 18 22.12.2014 20:32
Программу для расчёта площади окружности Rostbook Помощь студентам 14 28.06.2009 00:54
даны две точки. организовать движение из точки А в точку Б окружности! Wi1D Помощь студентам 6 23.05.2009 19:55
Дивижение окружности по окружности Irina8340 Помощь студентам 10 13.05.2009 20:25
движение окружности по окружности MyQwErTy Помощь студентам 13 04.11.2008 22:52