Форум программистов, компьютерный форум, киберфорум
Haskell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 16.02.2014
Сообщений: 35

Область на плоскости является либо прямоугольником, либо кругом

21.12.2014, 11:54. Показов 3699. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят помогите,желательно с объяснением) Область на плоскости является либо прямоугольником, либо кругом, либо объединением областей, либо их пересечением. Прямоугольник характеризуется координатами левого нижнего и правого
верхнего углов, круг — координатами центра и радиусом. Разработайте структуру данных, представляющую область описанного вида. Определите следующие функции:

1) contains, проверяющая, что заданная точка попадает в об-
ласть.

2) isRectangular, проверяющая, что область задается только
прямоугольниками.

3) isEmpty, проверяющая, что область пуста, т. е. ни одна точка
плоскости не попадает в нее.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.12.2014, 11:54
Ответы с готовыми решениями:

Выяснить, является ли четырехугольник ромбом, квадратом, прямоугольником, или чем-либо другим
Четырехугольник 1 Дан четырехугольник. Нужно выяснить, является ли он ромбом, квадратом, прямоугольником, или же чем-либо другим. ...

ERROR: Поле определяет связь с моделью, которая либо не установлена, либо является абстрактной
Есть 2 модели Post и Tag, которые уже добавлены в БД. Я решил попробовать установить django-taggit и избавиться от модели Tag. Изменил файл...

При изменении каких либо данных программа либо вылетает, либо просто не изменяет данные
Добрый вечер. Только недавно начал заниматься С++. И вот возникли проблемы. При изменении каких либо данных. Программа либо вылетает(Qt),...

7
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38169 / 21104 / 4307
Регистрация: 12.02.2012
Сообщений: 34,696
Записей в блоге: 14
21.12.2014, 13:50
Жаль, уже времени нет... Начать рекомендую с создания вот такого алгебраического типа данных (АТД):

Haskell
1
data Area = Union [Area] | Inters [Area] | Rectangle Int Int Int Int | Circle Int Int deriving (Eq,Show)
Тип Area - это либо объединение списка Area, либо пересечение списка Area, либо Rectangle, либо Circle.
1
Модератор
 Аватар для Curry
5156 / 3476 / 536
Регистрация: 01.06.2013
Сообщений: 7,538
Записей в блоге: 9
21.12.2014, 14:28
Первая функция вот
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
type Point = (Int,Int) -- координаты точки
 
data Figura =  Empty
             | Rect Point Point -- левый нижний и правый верхний угол прямоугольника
             | Circle Point Int -- центр и радиус
             | Union Figura Figura
             | Intersection Figura Figura
        deriving Show
 
contains:: Point -> Figura -> Bool
contains (x0,y0) = go 
   where go Empty = False 
         go (Rect (l,b) (r,t)) = (l<=x0) && (r>=x0) && (b<=y0) && (t>=y0) 
         go (Circle (x,y) r) =((x-x0)^2 + (y-y0)^2)<=r^2
         go (Union f1 f2) = (go f1) || (go f2)
         go (Intersection f1 f2) = (go f1) && (go f2)
 
testdata = Union (Rect (10,20) (30,50)) (Intersection (Circle (20,25) 5) (Rect (15,15) (20,25)))
 
main = print $ contains (17,21) testdata
Остальные можно по аналогии.

Добавлено через 10 минут
Haskell
1
2
3
4
5
isRectangular:: Figura -> Bool
isRectangular (Rect _ _) = True
isRectangular (Union f1 f2) = isRectangular f1 && isRectangular f2
isRectangular (Intersection f1 f2) = isRectangular f1 && isRectangular f2
isRectangular _ = False
Добавлено через 3 минуты
Haskell
1
2
isEmpty:: Figura -> Bool
isEmpty f = f == Empty
- если я правильно понял последнюю задачу.
1
 Аватар для Araneo
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
21.12.2014, 14:56
KolodeznyDiver, догадайтесь что не так...
Haskell
1
2
> isEmpty $ Intersection (Circle (1,1) 0)  (Circle (0,0) 0)
False
P.S. Я над последней сейчас думаю, а ещё о сравнении двух областей на равенство...
2
Модератор
 Аватар для Curry
5156 / 3476 / 536
Регистрация: 01.06.2013
Сообщений: 7,538
Записей в блоге: 9
21.12.2014, 21:40
Цитата Сообщение от Araneo Посмотреть сообщение
KolodeznyDiver, догадайтесь что не так...
А я написал к последней функции "если я правильно понял последнюю задачу". Легко проверить все фигуры подряд на вырожденность, а вот пустоту пересечений двух сложных фигур ... (отмажусь сказав что у меня времени нет )

Добавлено через 2 часа 1 минуту
... да и вторая задача нетривиальна. Могут быть круги полностью вырезанные пересечениями. Не, правда, времени, увы, нет.
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38169 / 21104 / 4307
Регистрация: 12.02.2012
Сообщений: 34,696
Записей в блоге: 14
22.12.2014, 00:12
Я немного поторопился... Забыл конструктор Empty и неверно задал число параметров у Circle.

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
data Area = Union [Area] | 
           Inters [Area] | 
           Empty         | 
           Rectangle Int Int Int Int |
           Circle Int Int Int deriving (Eq,Show)
 
-- Вспомогательная функция, возвращающая
-- пересечение двух отрезков в виде списка [a,b]
-- Если отрезки не пересекаются - возвращает пустой список
 
int2 :: [Int] -> [Int] -> [Int]
int2 [x11,x12] [x21,x22] | (x21 < x11) = int2 [x21,x22] [x11,x12]
int2 [x11,x12] [x21,x22] | (x12 < x21)  = []
                         | (x21 >= x11) && (x21 <= x12) && (x22 >= x11) && (x22 <= x12) = [x21,x22]
                         | otherwise = [x21,x12]
  
-- Набросок (не окончен) - пересечение двух областей
-- не хватает пересечения окружности и прямоугольника
-- и полной реализации пересечения объединений и пересечений
 
intersect :: Area -> Area -> Area
intersect Empty _ = Empty
intersect _ Empty = Empty
intersect (Rectangle x11 y11 x12 y12)
          (Rectangle x21 y21 x22 y22) = if (xx==[]) || (yy==[]) then 
                                           Empty 
                                        else 
                                           (Rectangle (xx!!0) (yy!!0) (xx!!1) (yy!!1))
         where xx = int2 [x11,x12] [x21,x22]
               yy = int2 [y12,y11] [y22,y21]
intersect (Circle x1 y1 r1)
          (Circle x2 y2 r2) = if (x1-x2)^2+(y1-y2)^2 <= (r1+r2)^2 then
                                 Inters [(Circle x1 y1 r1),(Circle x2 y2 r2)]
                              else
                                 Empty                              
intersect (Union ars) (Rectangle x1 y1 x2 y2) = (Union (map (\ a -> intersect a (Rectangle x1 y1 x2 y2)) ars))             
-- и т.п.          
                           
isEmpty :: Area -> Bool
isEmpty Empty               = True
isEmpty (Circle _ _ _)      = False
isEmpty (Rectangle _ _ _ _) = False
isEmpty (Union ars)         = all (/= Empty) ars
isEmpty (Inters ars)        = (foldl (\ acc fi -> intersect acc fi) (head ars) (tail ars))==Empty           
 
 
isRectangular :: Area -> Bool
isRectangular Empty  = False
isRectangular (Rectangle _ _ _ _) = True
isRectangular (Circle _ _ _)      = False
isRectangular (Union ars)         = all (isRectangular) ars
isRectangular (Inters ars)        = all (isRectangular) ars
2
1 / 1 / 0
Регистрация: 16.02.2014
Сообщений: 35
23.12.2014, 23:41  [ТС]
всем спасибо,выручили так выручили)
0
0 / 0 / 0
Регистрация: 15.01.2015
Сообщений: 1
15.01.2015, 00:45
Покажи пожалуйста пример ввода/вывода.Заранее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.01.2015, 00:45
Помогаю со студенческими работами здесь

Ввести с клави атуры знак арифметической операции(либо+,либо-,либо/)и два числа
Ввести с клавиатуры знак арифметической операции(либо+,либо-,либо/)и два числа.Вывести на экран результат.При вводе знака операции #-выход...

Во время загрузки логотипа виндовс изображение либо переодически пропадает, либо тормозит, либо нет сигнала
Здравствуйте!Помогите решить проблему.Вчера видеокарта работала исправно,а сегодня жена пришла,включила и во время загрузки логотипа...

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

Есть кучка из n камней. Два игрока играют в игру. Первый игрок на своем ходу может взять либо a1, либо a2, ., либо ak
Есть кучка из n камней. Два игрока играют в игру. Первый игрок на своем ходу может взять либо a1, либо a2, ..., либо ak камней. Второй...

две прямые либо паралельны либо совпадают либо не существуют
Д даны числа a1, b1, c1, a2, b2, c2. Напечатать координаты точки пересечения прямых, описываемых уравнениями a1x+b1y=c1 и a2x+b2y=c2, либо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru