:: Игры Разума
Мишень
Зингер
Автор

Сообщений: 541
Откуда: Белгород
Дата регистрации: 02.12.2008
[attachment 17992 4_07.jpg]

Здравствуйте.

Изучая C# попалась такая задача:
Написать программу, которая определяет, попадает ли точка с заданными координатами в область, закрашенную на рисунке серым цветом. Результат работы программы вывести в виде текстового сообщения.

Собираюсь поочередно в каждой четверти проверить, попала ли заданная точка в заштрихованную четверть или нет.
Для I и III четверти вроде как понятно. Например, для I четверти условие выгладит так:
Цитата:
Если (X>=0 И X<=R) И (Y>=0 И Y<=R), то точка в области

Со II и IV что то не могу разобраться.
Спасибо.
Ratings: 0 negative/0 positive
Re: Мишень
SoccerStudio

Сообщений: 5055
Откуда: Подмосковье
Дата регистрации: 28.11.2006
Ну, можно, конечно, и математически решить, но это если для данной относительно простой ситуации - определение попадания точки в круг с заданным центром и радиусом есть задача тривиальная, а проверить, что она при этом входит в большой квадрат вообще не вопрос. А во если область окажется произвольной, то это будет сложновато.
Но если речь идет о C#, то простым решением может быть следующее.
1) Подключаешь пространство имен System.Drawing
2) Создаешь объект класса Region, представляющий нужную область. Заодно разбираешься, как это делается. В данном случае все просто - берешь квадрат и вычитаешь из него круги. Для произвольной области то же самое, только надо брать более подходящие объекты, скажем, может потребоваться класс GraphicsPath.
3) Вызываешь метод IsVisible() созданного региона и радуешься полученному результату.
4) Не забываешь отдиспозить этот регион, ибо он больше тебе не нужен.
Ну, если на пальцах, то как-то так.


------------------
"Здесь я, братцы, сдержу матерщину, и скажу только "... мать!"" (с) Шаов




Исправлено 2 раз(а). Последнее : SoccerStudio, 18.01.14 23:38
Ratings: 0 negative/0 positive
Re: Мишень
Зингер
Автор

Сообщений: 541
Откуда: Белгород
Дата регистрации: 02.12.2008
И все же. Если абстрагироваться от C#, хочется общим простым алгоритмом, в данном случае не могу составить условие.
Что же касается классов и методов C#, м-м-м ... Я только постигаю азбуку И вопросы по C# еще впереди.;)
Ratings: 0 negative/0 positive
Re: Мишень
SoccerStudio

Сообщений: 5055
Откуда: Подмосковье
Дата регистрации: 28.11.2006
Зингер
хочется общим простым алгоритмом, в данном случае не могу составить условие.
Ну, если простой алгоритм, то...
1) Проверяем, попадает ли точка в большой квадрат. Если нет, то и в урезанный квадрат тоже не попадает, вопрос решен.
2) Для каждого из кругов проверяем, попадает ли точка в круг. Если ни в один из кругов не попало, значит, попало в заштрихованную область.
Все.
Ну, если есть вопрос, как определить попадание точки в круг, то это в школу, класс этак в шестой. Координаты центра и радиус известен, так что проблем нет.


------------------
"Здесь я, братцы, сдержу матерщину, и скажу только "... мать!"" (с) Шаов




Исправлено 1 раз(а). Последнее : SoccerStudio, 19.01.14 00:06
Ratings: 0 negative/0 positive
Re: Мишень
Зингер
Автор

Сообщений: 541
Откуда: Белгород
Дата регистрации: 02.12.2008
SoccerStudio
Зингер
хочется общим простым алгоритмом, в данном случае не могу составить условие.
Ну, если простой алгоритм, то...
1) Проверяем, попадает ли точка в большой квадрат. Если нет, то и в урезанный квадрат тоже не попадает, вопрос решен.
2) Для каждого из кругов проверяем, попадает ли точка в круг. Если ни в один из кругов не попало, значит, попало в заштрихованную область.
Все.
Ну, если есть вопрос, как определить попадание точки в круг, то это в школу, класс этак в шестой. Координаты центра и радиус известен, так что проблем нет.

Спасибо.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 5 (Гостей: 5)

© 2000-2024 Fox Club 
Яндекс.Метрика