De ce contează?
Un arhitect nu îi trimite constructorului o schiță mâzgălită pe un șervețel. O traduce întâi în măsurători exacte: colțul casei e la 4 metri de gard, peretele are 6 metri lungime, fereastra e un dreptunghi de 2 pe 1. Abia după ce desenul devine numere se poate construi ceva. La fel faci și tu cu o problemă de geometrie: înainte să scrii o singură formulă, traduci desenul în coordonate.
Ideea-cheie
Multe probleme de geometrie îți pun în față o figură: un triunghi, un dreptunghi, niște puncte împrăștiate în plan. Tentația e să sari direct la o formulă pe care o ții minte. Dar formula nu are de unde să știe ce e în desenul tău — tu trebuie întâi să transformi figura într-un model de date pe care programul îl poate citi.
Pasul pe care îl sar majoritatea se numește modelare: decizi cum reprezinți figura înainte să decizi ce calculezi. Un punct devine o pereche (x, y). Un segment devine două puncte, capetele lui. Un dreptunghi devine fie patru colțuri, fie două colțuri opuse, fie un colț plus lățime și înălțime. Odată ce ai modelul, formula vine aproape singură.
Orice figură geometrică devine, în program, un set de puncte cu coordonate. Reflexul corect: mai întâi alegi reprezentarea (ce numere descriu figura), abia apoi formula (ce faci cu acele numere). Dacă alegi formula prima, riști s-o aplici pe niște date care nu se potrivesc cu ea.
În C++ cea mai curată reprezentare a unui punct este un struct, exact ca la lecția despre sistemul cartezian:
struct Punct {
int x, y; // coordonate intregi
};
// un segment = doua puncte (capetele)
struct Segment {
Punct a, b;
};
// un dreptunghi cu laturi paralele cu axele = doua colturi opuse
struct Dreptunghi {
Punct stangaJos, dreaptaSus;
};Observă că nu am scris niciun algoritm. Am scris doar cum arată figura în memorie. Asta e modelarea: o decizie, nu un calcul.