27 lines
781 B
C
27 lines
781 B
C
#include "include/geom.h"
|
|
|
|
Tri* alltris[512];
|
|
size_t allsize = 0;
|
|
|
|
Tri* tri_init(Pt a, Pt b, Pt c) {
|
|
Tri* tri = malloc(sizeof(Tri));
|
|
*(alltris + allsize) = tri;
|
|
allsize++;
|
|
*tri = (Tri){a, b, c};
|
|
return tri;
|
|
}
|
|
|
|
bool tri_within(Pt pt, Tri* tri) {
|
|
double denom =
|
|
((tri->b.y - tri->c.y) * (tri->a.x - tri->c.x) +
|
|
(tri->c.x - tri->b.x) * (tri->a.y - tri->c.y));
|
|
double a = ((tri->b.y - tri->c.y) * (pt.x - tri->c.x) +
|
|
(tri->c.x - tri->b.x) * (pt.y - tri->c.y)) /
|
|
denom;
|
|
double b = ((tri->c.y - tri->a.y) * (pt.x - tri->c.x) +
|
|
(tri->a.x - tri->c.x) * (pt.y - tri->c.y)) /
|
|
denom;
|
|
double c = 1 - a - b;
|
|
return 0 <= a && a <= 1 && 0 <= b && b <= 1 && 0 <= c && c <= 1;
|
|
}
|