Verifică dacă trei puncte sunt coliniare C++

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):

https://i.ibb.co/CtbhFG5/image.png

Explicarea algoritmului

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.

Ce este panta unei drepte?

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 = y2y1x2x1=tg(α)\frac{y_2 - y_1}{x_2-x_1}=tg(\alpha). Iată o reprezentare grafică de pe Wikipedia:

https://i.ibb.co/N3zfCbY/image.png

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.

Implementare C++

#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;
}

Alte resurse și bibliografie

DS

Autorul acestei lecții

Dominic Satnoianu

Această lecție a fost redactată de către Dominic Satnoianu.

© 2021 – 2025 Aspire Education Labs SRL. Toate drepturile rezervate.

Așa cum este specificat și în termeni și condiții, conținutul acestei pagini este protejat de legea drepturilor de autor și este interzisă copierea sau modificarea acestuia fără acordul scris al autorilor.

Încălcarea drepturilor de autor este o infracțiune și se pedepsește conform legii.

Comentarii 0

Autentifică-te pentru a putea comenta.

Autentifică-te