real xa, ya, xb, yb, xc, yc, xp, yp, xpa, ypa, xpb, ypb, xpc, ypc, dot_apb, mag_apb, dot_bpc, mag_bpc, dot_cpa, mag_cpa, theta_apb, theta_bpc, theta_cpa // Lemos os pontos (vetores) a, b, c e p: leia xa, ya, xb, yb, xc, yc, xp, yp // Calculamos o vetor a - p xpa <- xa - xp ypa <- ya - yp // b - p xpb <- xb - xp ypb <- yb - yp // c - p xpc <- xc - xp ypc <- yc - yp // Agora temos tres vetores que, saindo do ponto p, chegam // aos pontos A, B e C. // Calculamos os angulos APB, BPC e CPA. Se somarem 2*pi, // dando uma "volta completa", é porque P está dentro do // triângulo. // O produto escalar de v1 e v2 e' // v1 . v2 = |v1| x |v2| cos theta, // (o produto das magnitudes vezes o angulo entre eles). // Portanto, // theta = acos (v1 . v2 / |v1| x |v2|) dot_apb <- xpa*xpb + ypa*ypb mag_apb <- RAIZ(xpa^2 + ypa^2) * RAIZ(xpb^2 + ypb^2) dot_bpc <- xpb*xpc + ypb*ypc mag_bpc <- RAIZ(xpb^2 + ypb^2) * RAIZ(xpc^2 + ypc^2) dot_cpa <- xpc*xpa + ypc*ypa mag_cpa <- RAIZ(xpc^2 + ypc^2) * RAIZ(xpa^2 + ypa^2) theta_apb = acos (dot_apb / mag_apb) theta_bpc = acos (dot_bpc / mag_bpc) theta_cpa = acos (dot_cpa / mag_cpa) se (theta_apb + theta_bpc + theta_cpa = 2*pi): mostre "Dentro!" senao mostre "Fora!"