Inner Coordinates
by Joshua Salwen
JavaScript
function inCanvas(x, y, width, height, offsetX = 0, offsetY = 0)
{
var newX = x - offsetX;
var newY = y - offsetY;
var inCanvas = newX >= 0 && newY >= 0 && newX <= width && newY <= height;
//console.log(x, y, inCanvas);
}
function trimOverflow(point, max)
{
if (point < 0) {
return 0;
}
if (point > max) {
return max;
}
}
function yDiff(b, alpha) {
}
function innerCoordinates(startX, startY, endX, endY, width, height, offsetX, offsetY)
{
var innerStartX = startX - offsetX;
var innerStartY = startY - offsetY;
var innerEndX = endX - offsetX;
var innerEndY = endY - offsetY;
console.log('start', `${innerStartX}, ${innerStartY}`);
console.log('end', `${innerEndX}, ${innerEndY}`);
var startIsIn = inCanvas(innerStartX, innerStartY, width, height);
var endIsIn = inCanvas(innerStartX, innerStartY, width, height);
if (startIsIn && endIsIn) {
// already insdie inner
return {
begin: {
x: innerStartX,
y: innerStartY,
},
end: {
x: innerEndX,
y: innerEndY
}
};
}
var triangleA = Math.abs(startY - endY);
var triangleB = Math.abs(startX - endX);
// get the alpha angle
var alphaAngle = Math.atan(triangleA / triangleB);
var betaAngle = 90 - alphaAngle;
var slope = (innerEndY - innerStartY)/(innerEndX - innerStartX);
//console.log(`slope: ${slope}`);
if (startX === endX)
{
// straight vert line
innerStartY = trimOverflow(innerStartY, height);
innerEndY = trimOverflow(innerEndY, height);
}
else if (startY === endY)
{
// straight horz line
innerStartX = trimOverflow(innerStartX, width);
innerEndX = trimOverflow(innerEndX, width);
}
else if (startX < endX && startY < endY)
{
// lower left to upper right
if (!startIsIn) {
innerStartY...