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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2017, 21:41   #1
NattSSS
 
Регистрация: 25.05.2017
Сообщений: 3
По умолчанию Класс окружность С#

Как создать отдельный класс, который будет определять пересекаются две окружности или нет?
NattSSS вне форума Ответить с цитированием
Старый 03.06.2017, 06:58   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Как обычно.
1. Решить в каком классе будет данный метод - в классе окружности или в каком-то отдельном.
2. Создать класс окружности
3. Если метод в отдельном классе, то создать его, иначе просто добавить в окружность.
4. Написать код метода. Надеюсь не надо объяснять школьную программу, т.е. как определить, что две окружности пересекаются?
p51x вне форума Ответить с цитированием
Старый 03.06.2017, 13:53   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Цитата:
Сообщение от NattSSS Посмотреть сообщение
Как создать отдельный класс,
Этот отдельный класс можно назвать MathHelper. Определять, пересекаются круги или нет, можно с помощью самописного метода IsIntersect(). Принимать этот метод будет ссылки на два экземпляра класса Circle. Возвращать true - если пересекаются или false - если не пересекаются.

Чтобы определить пересекаются или нет нужно вычислить расстояния между центрами кругов по теореме Пифагора: сумма квадратов длин катетов равна квадрату длины гипотенузы. Далее, сложить радиусы и сравнить это значение с расстоянием между центрами кругов.

Код:
using System;

namespace CircleIntersection
{
    class Program
    {
        static void Main(string[] args)
        {
            Circle c1 = new Circle(radius: 10.0, centerX: 0.0, centerY: 0.0);
            Circle c2 = new Circle(radius: 10.0, centerX: -19.0, centerY: 0.0);

            if (MathHelper.IsIntersect(c1, c2))
            {
                Console.WriteLine("Intersect");
            }
            else
            {
                Console.WriteLine("Not intersect");
            }

            // Pause
            Console.ReadKey();
        }
    }

    public class MathHelper
    {
        public static bool IsIntersect(Circle s1, Circle s2)
        {
            double x1 = s1.CenterX, y1 = s1.CenterY;
            double x2 = s2.CenterX, y2 = s2.CenterY;
            double dist = Math.Sqrt(Math.Pow(x2 - x1, 2) + Math.Pow(y2 - y1, 2));
            return dist < (s1.Radius + s2.Radius);
        }
    }

    public class Circle
    {
        public Circle(double radius, double centerX, double centerY)
        {
            Radius = radius;
            CenterX = centerX;
            CenterY = centerY;
        }

        public double Radius { get; set; }
        public double CenterX { get; set; }
        public double CenterY { get; set; }
    }
}

Последний раз редактировалось 8Observer8; 03.06.2017 в 14:07.
8Observer8 вне форума Ответить с цитированием
Старый 03.06.2017, 19:51   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Добавил визуализацию на OpenGL. Проект на VS2015: CircleIntersection.rar

CircleIntersection.png
8Observer8 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно сделать наследование классов, 1 класс находится первой форме, 2 класс во второй. Вероника99 Помощь студентам 3 29.04.2016 23:02
C++ Создать класс окружность Raskolbasnik Помощь студентам 14 14.05.2013 22:18
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Добавить класс в проект2,похожий на класс из проекта1!оба проекта есть! xeops C# (си шарп) 0 15.05.2012 20:31
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24