Примери: Правоъгълник в равнината
Нека разгледаме правоъгълник в равнината, чиито страни са успоредни на координатните оси. За определянето на такъв правоъгълник е напълно достатъчно да се укажат два срещуположни негови върха – например долния ляв (bl
– bottom left) и горния десен (ur
– upper right).
Дефиницията на структурата rect
, която описва такива правоъгълници, е представена в следния фрагмент:
struct point { double x; double y; }; struct rect { point bl; point ur; };
Обърнете внимание, че като членове на структурата rect
се използват променливи, чийто тип е дефинираната по-горе структура point
.
Нека разгледаме няколко функции, които работят със структурите rect
и point
. Първо, нека дефинираме функция cononical_rect
, целта на която е да върне правоъгълник, в който членовете има коректни стойности – x-координатата на долния ляв ъгъл трябва да е по-малка от x-координатата на горния десен ъгъл; y-координатата на долния ляв ъгъл трябва да е по-малка от y-координата на горния десен ъгъл. Функцията cononical_rect
обезпечава спазването на това изискване.
inline double min(double x, double y) { return xy?x:y; } rect canonical_rect(rect r) { point bl={min(r.bl.x,r.ur.x),min(r.bl.y,r.ur.y)}; point ur={max(r.bl.x,r.ur.x),max(r.bl.y,r.ur.y)}; rect result={bl,ur}; return result; }
Обърнете внимание, че функциите min
и max
са дефинирани като inline
функции.
Нека разгледаме още една функция, която работи със структурите rect
и point
– функцията contains
. Тази функция получава като аргументи правоъгълник r
и точка p
и проверява дали точката p
се намира в правоъгълника r
. Ако точката се намира в правоъгълника, функцията връща стойност true
, иначе – връща false
.
bool contains(rect r, point p) { return p.x>=r.bl.x && p.x<=r.ur.x && p.y>=r.bl.y && p.y <= r.ur.y; }
Pingback: CPP-101: Кратък обзор на езика за програмиране C++ | Записки по програмиране