JSFiddle - React, Tailwind, and code Playground

HTML

<canvas id="Canvas" width="500" height="500"></canvas>

JavaScript

var canvas = document.getElementById("Canvas");
    var ctx = canvas.getContext("2d");
    var poly =[{x:150,y:150},{x:400,y:100},{x:350,y:200},{x:200,y:210},{x:210,y:290},{x:240,y:280},{x:245,y:210},{x:400,y:400},{x:210,y:450}]
    var N=poly.length;
    var outer=[];
    var h=20 //distance between polygons
    var mi,mi1,li,li1,ri,ri1,si,si1,Xi1,Yi1;
    for(var i=0; i<N; i++)
    {
        mi=(poly[(i+1) % N].y - poly[i].y)/(poly[(i+1) % N].x - poly[i].x);
        mi1=(poly[(i+2) % N].y - poly[(i+1) % N].y)/(poly[(i+2) % N].x - poly[(i+1) % N].x);
        li=Math.sqrt((poly[(i+1) % N].x - poly[i].x)*(poly[(i+1) % N].x - poly[i].x)+(poly[(i+1) % N].y - poly[i].y)*(poly[(i+1) % N].y - poly[i].y));
        li1=Math.sqrt((poly[(i+2) % N].x - poly[(i+1) % N].x)*(poly[(i+2) % N].x - poly[(i+1) % N].x)+(poly[(i+2) % N].y - poly[(i+1) % N].y)*(poly[(i+2) % N].y - poly[(i+1) % N].y));
        ri=poly[i].x+h*(poly[(i+1) % N].y - poly[i].y)/li;
        ri1=poly[(i+1) % N].x+h*(poly[(i+2) % N].y - poly[(i+1) % N].y)/li1;
        si=poly[i].y-h*(poly[(i+1) % N].x - poly[i].x)/li;
        si1=poly[(i+1) % N].y-h*(poly[(i+2) % N].x - poly[(i+1) % N].x)/li1;
        Xi1=(mi1*ri1-mi*ri+si-si1)/(mi1-mi);
        Yi1=(mi*mi1*(ri1-ri)+mi1*si-mi*si1)/(mi1-mi);
        outer.push({x:Xi1,y:Yi1});
    }
    ctx.strokeStyle = "#000000";
    draw(poly);
    ctx.strokeStyle = "#FF0000";
    draw(outer);

    function draw(p) {
        ctx.beginPath();
        ctx.moveTo(p[0].x,p[0].y)
        for(var i=1;i<p.length;i++)
        {
            ctx.lineTo(p[i].x,p[i].y)
        }
        
        ctx.closePath();
        ctx.stroke();
    }