Napiši program koji proverava da li se tačka nalazi u unutrašnjosti trougla.
Sa standardnog ulaza se unosi 8 realnih brojeva iz intervala \([-10, 10]\), zaokruženih na dve decimale. U prvom redu se unose \(x\) i \(y\) koordinata tačke koja se analizira, a u naredna tri reda \(x\) i \(y\) koordinate temena trougla. Među 4 unete tačke nema kolinearnih.
Na standardni izlaz ispisati da
ako tačka pripada
trouglu ili ne
ako ne pripada.
0.00 2.00 -3.00 -3.00 -1.00 4.00 3.00 2.00
da
Tačka \(S\) je unutar trougla \(ABC\) ako i samo ako je tačka \(S\) sa iste strane prave \(AB\) kao i tačka \(C\), sa iste strane prave \(BC\) kao i tačka \(A\) i sa iste strane tačke \(AC\) kao i tačka \(B\) tj. ako svi trouglovi \(ABS\), \(BCS\) i \(CAS\) imaju istu orijentaciju.
#include <iostream>
#include <vector>
using namespace std;
struct Point {
double x;
double y;
};
double orientation(const Point &A, const Point &B, const Point &C)
{
return (B.x - A.x) * (C.y - A.y) - (C.x - A.x) * (B.y - A.y);
}
bool in_triangle(const Point &A, const Point &B, const Point &C,
const Point &S)
{
double o1 = orientation(A, B, S);
double o2 = orientation(B, C, S);
double o3 = orientation(C, A, S);
if ((o1 > 0 && o2 > 0 && o3 > 0) ||
(o1 < 0 && o2 < 0 && o3 < 0)) {
return true;
}
return false;
}
int main(void)
{
, A, B, C;
Point S
>> S.x >> S.y;
cin >> A.x >> A.y;
cin >> B.x >> B.y;
cin >> C.x >> C.y;
cin
if (in_triangle(A, B, C, S)) {
<< "da" << endl;
cout } else {
<< "ne" << endl;
cout }
return 0;
}