Класове точка и правоъгълник
Задача. Да се реализират класове, представящи точка в равнината и правоъгълник със стани успоредни на координатните оси:
- class Point
- Представяне - две double координати
- Конструктори (подразбиране и с координати), селектори и мутатори
- distXto, distYto (разстояние между две точки съответно по X и по Y)
- Колко параметъра ще имаме?
- Функциите const ли ще са?
- Каква е разликата дали параметър е обявен като Point p или Point const& p?
- Ползвайте селекторите!
- min, max (минимум и максимум на точки)
- Функциите вземат покоординатно минимум или максимум
- Полезни са при реализация на сечение и обединение на правоъгълници
- Използвайте конструктор за да създадете точката - резултат
- Може ли да върнем Point const& вместо Point? Защо?
- translate (транслация на точка)
- Като параметър приемаме точка, която тълкуаме като транслиращ вектор
- Защо не трябва функцията да е const?
- Ползвайте мутаторите, вместо да работите директно с член-данните
- class Rect
- Представяне - две точки по диагонала, TopLeft и BottomRight
- Конструктори (подразбиране и с точки), селектори (getTL(), getBR()) и мутатори (setTL() и setBR())
- Трябва да има конструктор по подразбиране с празно тяло. Автоматично се извикват конструктори по подразбиране за двете точки
- Могат ли селекторите да връщат Point const& вместо Point? Има ли смисъл?
- Проблем: потребителят може да подаде грешни TopLeft и BottomRight точки на конструкторите или мутаторите (т.е. например да ги размени, така че те не са наистина горна лява и долна дясна).
- Решение: напишете функция normalize, която по подадени две произволни точки задава правилни горна лява и долна дясна точка и я викайте в конструкторите и мутаторите. Функцията normalize може да е private
- Височина и широчина на правоъгълник
- Лице и периметър на правоъгълник
- Проверка дали точка е вътре в правоъгълник
- Подправоъгълник (дали един правоъгълник се съдържа в друг, т.е. дали всичките върхове на единия се съдържат в другия)
- Обединение на два правоъгълника (най-малкият правоъгълник, съдържащ и двата)
- Изразете точките на обединението с помощта на min и max на точките на двата правоъгълника
- Конструирайте резултата с конструктор
- Сечение на два правоъгълника (най-големият правоъгълник, съдържащ се и в двата)
- Изразете с помощта на min и max
- Проблем: какво се получава, ако сечението е празно?
- Решение: нужна е функция overlap проверка дали два правоъгълника въобще се пресичат. За целта може да се добавят функции betweenX и betweenY на класа Point, които определят дали една точка е между други две по X и по Y.
- Използвайте функцията overlap за да проверите лошите случаи при сечение. Как ще върнете празен правоъгълник?
- Разлика на два правоъгълника (най-големият правоъгълник, съдържащ се в единия и непресичащ се с другия)
- Транслация
- Използвайте транслация на точки
- Защо не можем да ползваме напр. getTL().translate(p)?
- Разпъване и свиване на правоъгълника във всички посоки с размер d.
- Коя от функциите за точки е удобно да ползвате
- Можете ли да използвате разпъване, за да реализирате свиване?
Последно модифициране: събота, 12 ноември 2011, 17:38