You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
zomburger/public/lib/utilities.js

38 lines
1.1 KiB
JavaScript

// Function that is similar to clamp but loops between a min and max value
function cycle(value, minimum, maximum) {
const difference = maximum - minimum;
if (value > maximum) {
return (value - maximum) % difference + minimum;
} else if (value < minimum) {
return maximum - (minimum - value) % difference;
} else {
return value;
}
}
// A utility function to calculate area of triangle
// formed by (x1, y1) (x2, y2) and (x3, y3)
function triangleArea(x1, y1, x2, y2, x3, y3) {
return abs((x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2))/2.0);
}
// A function to check whether point P(x, y) inside
// the triangle formed by A(x1, y1), B(x2, y2) and C(x3, y3)
function isInsideTriangle(x, y, x1, y1, x2, y2, x3, y3) {
/* Calculate area of triangle ABC */
const A = triangleArea (x1, y1, x2, y2, x3, y3);
/* Calculate area of triangle PBC */
const A1 = triangleArea (x, y, x2, y2, x3, y3);
/* Calculate area of triangle PAC */
const A2 = triangleArea (x1, y1, x, y, x3, y3);
/* Calculate area of triangle PAB */
const A3 = triangleArea (x1, y1, x2, y2, x, y);
/* Check if sum of A1, A2 and A3 is same as A */
return (A == A1 + A2 + A3);
}