function sdOrientedBox(p, a, b, th) {
const ba = vecSub(b, a);
const l = vecMag(ba);
const [dx, dy] = vecScale(ba, 1 / l);
let q = vecSub(p, vecScale(vecAdd(a, b), 0.5));
q = mat2DotVec2([dx, dy, -dy, dx], q);
q = vecScale(vecSub(vecAbs(q), [l, th]), 0.5);
return vecMag(vecMax(q, 0.0)) + Math.min(Math.max(q[0], q[1]), 0.0);
}