Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.
Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.
Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.
Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.
Meniu shortcuturi | ? |
Căutare probleme sau utilizatori | / |
Navigare printre rezultatele căutării | ↑, ↓ |
Meniu de contact și feedback | CTRL + Shift + F |
Ieșire din meniuri | Esc |
Setări editor | CTRL + Shift + S |
Schimbare stil editor | CTRL + Shift + E |
Șabloane de cod | CTRL + Shift + 1/2/3 |
Golire editor | CTRL + Shift + 4 |
Dându-se trei puncte în plan, să se verifice dacă acestea sunt coliniare sau nu.
Exemplu. Pentru punctele (1, 2)
, (2, 3)
și (3, 4)
, răspunsul este DA
(vezi imaginea de mai jos):
Există multe metode de a rezolva această problemă (folosind aria sau perimetrul, verificând dacă toate aparțin unei drepte — funcție de gradul I, etc). Ne vom axa pe noțiunea de pantă, deoarece este cel mai ușor de înțeles.
Conform Wikipedia,
În matematică, panta unei drepte este o valoare numerică ce descrie direcția și înclinația unei drepte. Din punct de vedere geometric, panta reprezintă tangenta unghiului făcut de dreaptă cu orizontala.
Mai precis, pentru două puncte (x1, y1)
, (x2, y2)
cunoscute, avem panta m = $\frac{y_2 - y_1}{x_2-x_1}=tg(\alpha)$. Iată o reprezentare grafică de pe Wikipedia:
Avem următoarea proprietate interesantă:
Trei puncte sunt coliniare dacă pantele oricăror două puncte sunt egale între ele.
Așadar, pentru soluția noastră vom calcula pantele celor trei drepte ce se pot forma dintre cele trei puncte, iar dacă sunt egale, atunci putem afirma că punctele sunt coliniare. Altfel, acestea nu sunt.
#include <iostream>
using namespace std;
int main()
{
//Declarăm și citim coordonatele celor trei puncte
int x1, y1, x2, y2, x3, y3;
cout << "Primul punct: ";
cin >> x1 >> y1;
cout << "Al doilea punct: ";
cin >> x2 >> y2;
cout << "Al treilea punct: ";
cin >> x3 >> y3;
//Determinăm pantele (m)
double m12 = double(y2 - y1) / (x2 - x1),
m23 = double(y3 - y2) / (x3 - x2),
m13 = double(y3 - y1) / (x3 - x1);
if(m12 == m23 && m23 == m13) { //Dacă pantele sunt egale
cout << "DA";
} else {
cout << "NU";
}
return 0;
}