5 #include "../system/type.hpp"
16double cross_product(__v2f_t a, __v2f_t b) {
18 return a.x * b.y - a.y * b.x;
31bool is_inside_triangle(__v2f_t P, __v2f_t A, __v2f_t B, __v2f_t C) {
35 double abc = 0.5 * abs(A.x * (B.y - C.y) + B.x * (C.y - A.y) + C.x * (A.y - B.y));
37 double abp = 0.5 * abs(A.x * (B.y - P.y) + B.x * (P.y - A.y) + P.x * (A.y - B.y));
38 double bcp = 0.5 * abs(B.x * (C.y - P.y) + C.x * (P.y - B.y) + P.x * (B.y - C.y));
39 double cap = 0.5 * abs(C.x * (A.y - P.y) + A.x * (P.y - C.y) + P.x * (C.y - A.y));
42 return abc == abp + bcp + cap;
55bool is_convex(__v2f_t A, __v2f_t B, __v2f_t C,
bool clockwise =
true) {
57 __v2f_t BA = {A.x - B.x, A.y - B.y};
58 __v2f_t BC = {C.x - B.x, C.y - B.y};
60 double cross = BA.x * BC.y - BA.y * BC.x;
82bool is_concave(__v2f_t A, __v2f_t B, __v2f_t C,
bool clockwise =
true) {
85 return is_convex(A, B, C, !clockwise);