for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  

Список Форумов  :: Игры Разума
   :: Помощь сайту :: 

Мишень
Зингер
Автор

Сообщений: 520
Откуда: Белгород
Дата: 18.01.14 20:49:31ОтветитьЦитировать
[attachment 17992 4_07.jpg]

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

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

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

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


Вложения:
[4_07.jpg (8.8KB)]  

Re: Мишень
SoccerStudio

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


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




Исправлено: SoccerStudio, 18.01.14 21:38
Ratings: 0 negative/0 positive

Re: Мишень
Зингер
Автор

Сообщений: 520
Откуда: Белгород
Дата: 18.01.14 21:40:12ОтветитьЦитировать
И все же. Если абстрагироваться от C#, хочется общим простым алгоритмом, в данном случае не могу составить условие.
Что же касается классов и методов C#, м-м-м ... Я только постигаю азбуку И вопросы по C# еще впереди.
Ratings: 0 negative/0 positive

Re: Мишень
SoccerStudio

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


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




Исправлено: SoccerStudio, 18.01.14 22:06
Ratings: 0 negative/0 positive

Re: Мишень
Зингер
Автор

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

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



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

On-line: 16 pasha_usue Komar Taran  and Guests: 13


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