長方形を三角形に合わせるために必要な変換を計算する方法は次のとおりです。
- 三角形の「ピボット ポイント」である点 B に変換します。
 
- 辺BCの角度分回転します。
 
- 角 B の角度分、X 方向に傾斜させます。
 

したがって、最初に翻訳します。
        // transform translate = pt2
        var translate = pt2;
次に回転します。
        // transform rotation = angleBC (based on slope of BC)
        var rotation = Math.atan2((pt3.y-pt2.y),(pt3.x-pt2.x));
最後にskewX:
        // transform skewX, based on angleB 
        var skewX = Math.tan(angleB-Math.PI/2);
以下は、skewX で使用する angleB を取得する方法です。
        // calculate segment lengths
        var AB = Math.sqrt(Math.pow(pt2.x-pt1.x,2)+ Math.pow(pt2.y-pt1.y,2));    
        var BC = Math.sqrt(Math.pow(pt2.x-pt3.x,2)+ Math.pow(pt2.y-pt3.y,2)); 
        var AC = Math.sqrt(Math.pow(pt3.x-pt1.x,2)+ Math.pow(pt3.y-pt1.y,2));
        // calculate angleB using law of cosines
        var angleB = Math.acos((BC*BC+AB*AB-AC*AC)/(2*BC*AB));
描画する長方形の幅と高さも必要です。
        // rectangle height = triangle altitude
        var rectHeight = AB * Math.sin(angleB);
        // rectangle width = triangle BC
        var rectWidth = BC;
ちょっとした「落とし穴」:
移動ポイントは B ですが、長方形は左上から描画されます。
これは、長方形を rectHeight だけ垂直方向にオフセットする必要があることを意味します。
        ctx.rect(0,  -rectHeight,  rectWidth,  rectHeight);
また、実際には「落とし穴」ではありませんが、より自然な制限があります。
コーナー B の角度は <180 でなければなりません。
したがって、三角形が「反転」する場合は、ポイント A と C を反転して補正する必要があります。
あなたが持っている興味深いプロジェクト!  
終わったら少し分けてくれませんか?
ここにコードとフィドルがあります:   http://jsfiddle.net/m1erickson/KKELu/
<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<style>
    body{ background-color: ivory; }
    #canvas{border:1px solid red;}
</style>
<script>
$(function(){
    var canvas=document.getElementById("canvas");
    var ctx=canvas.getContext("2d");
    var pt1={x:100,y:100};
    var pt2={x:150,y:225};
    var pt3={x:250,y:150};
    drawTriangle();
    drawRectangle();
    function drawRectangle(){
        // calc transform info
        var info=analyzeTriangle();
        ctx.save();
        ctx.translate(info.translate.x,info.translate.y);
        ctx.rotate(info.rotation);
        ctx.transform(1,0,info.skewX,1,0,0);
        ctx.beginPath();
        // since rects origin is top left, must offset y by -height
        ctx.rect(0,-info.rectHeight,info.rectWidth,info.rectHeight);
        ctx.strokeStyle="purple";
        ctx.stroke();
        ctx.restore();
    }
    function drawTriangle(){
        ctx.beginPath();
        ctx.strokeStyle="blue";
        ctx.moveTo(pt1.x,pt1.y);
        ctx.lineTo(pt2.x,pt2.y);
        ctx.lineTo(pt3.x,pt3.y);
        ctx.closePath();
        ctx.stroke();
        ctx.fillStyle="rgba(255,255,0,0.10)";
        ctx.fill();
    }
    function analyzeTriangle(){
        // segment lengths
        var AB = Math.sqrt(Math.pow(pt2.x-pt1.x,2)+ Math.pow(pt2.y-pt1.y,2));    
        var BC = Math.sqrt(Math.pow(pt2.x-pt3.x,2)+ Math.pow(pt2.y-pt3.y,2)); 
        var AC = Math.sqrt(Math.pow(pt3.x-pt1.x,2)+ Math.pow(pt3.y-pt1.y,2));
        // angleB = using law of cosines
        var angleB = Math.acos((BC*BC+AB*AB-AC*AC)/(2*BC*AB));
        // transform translate = pt2
        var translate = pt2;
        // transform rotation = angleBC (based on slope of BC)
        var rotation = Math.atan2((pt3.y-pt2.y),(pt3.x-pt2.x));
        // transform skewX, based on angleB 
        var skewX = Math.tan(angleB-Math.PI/2);
        // rectangle height = triangle altitude
        var rectHeight = AB * Math.sin(angleB);
        // rectangle width = triangle BC
        var rectWidth = BC;
        return({
            translate:translate,
            rotation:rotation,
            skewX:skewX,
            rectHeight:rectHeight,
            rectWidth:rectWidth
        });
    }
}); // end $(function(){});
</script>
</head>
<body>
    <canvas id="canvas" width=350 height=350></canvas>
</body>
</html>