JSFiddle - React, Tailwind, and code Playground

JavaScript

function drawRect(context, x1,y1, x2,y2, x3,y3, x4,y4) {
    context.moveTo(x1,y1);
    context.lineTo(x2,y2);
    context.lineTo(x3,y3);
    context.lineTo(x4,y4);
    context.lineTo(x1,y1);
    context.stroke();   
}

function drawRotated(context, x1,y1, x2,y2, x3,y3, x4,y4, degrees) {
    var angle = degrees * Math.PI/180
    var cos = function(v) { return Math.cos(v); };
    var sin = function(v) { return Math.sin(v); };
    
    var nx1 = (-w/2)*cos(angle) - (-h/2)*sin(angle) + (x+w/2),
        ny1 = (-w/2)*sin(angle) + (-h/2)*cos(angle) + (y+h/2),
    
        nx2 = (w/2)*cos(angle) - (-h/2)*sin(angle) + (x+w/2),
        ny2 = (w/2)*sin(angle) + (-h/2)*cos(angle) + (y+h/2);
    
        nx3 = (w/2)*cos(angle) - (h/2)*sin(angle) + (x+w/2),
        ny3 = (w/2)*sin(angle) + (h/2)*cos(angle) + (y+h/2);
    
        nx4 = (-w/2)*cos(angle) - (h/2)*sin(angle) + (x+w/2),
        ny4 = (-w/2)*sin(angle) + (h/2)*cos(angle) + (y+h/2);
    
    context.moveTo(nx1,ny1);
    context.lineTo(nx2,ny2);
    context.lineTo(nx3,ny3);
    context.lineTo(nx4,ny4);
    context.lineTo(nx1,ny1);
    context.stroke();
    
    // new bounding box = min(nx1,nx2,nx3,nx4)/min(ny1,ny2,ny3,ny4)
    // to max(nx1,nx2,nx3,nx4)/max(ny1,ny2,ny3,ny4)
    
    var min = function(v1,v2) { return Math.min(v1,v2); }
    var max = function(v1,v2) { return Math.max(v1,v2); }
    var minx = min(min(nx1,nx2),min(nx3,nx4)),
        miny = min(min(ny1,ny2),min(ny3,ny4)),
        maxx = max(max(nx1,nx2),max(nx3,nx4)),
        maxy = max(max(ny1,ny2),max(ny3,ny4));
    
    context.moveTo(minx,miny);
    context.lineTo(minx,maxy);
    context.lineTo(maxx,maxy);
    context.lineTo(maxx,miny);
    context.lineTo(minx,miny);
    context.stroke();
}
    
var canvas = document.createElement("canvas");
document.body.appendChild(canvas);
canvas.width = 300;
canvas.height = 300;

var context = canvas.getContext("2d");

var x=100, y=100, w=100, h=150;
var x1=x, y1=y,
    x2=x+w, y2=y,
    x3=x+w, y3=y+h,
   ...