Javascript 在HTML画布中根据三个给定的长度绘制三角形

Javascript 在HTML画布中根据三个给定的长度绘制三角形,javascript,math,canvas,Javascript,Math,Canvas,我试图创建一个函数,它在一个HTML画布中间画出三个给定长度的三角形,我认为这将是一个简单的HTML画布的介绍,我错了。 到目前为止,我已经看到了这一点,但侧面渲染不正确: function drawTriangle(sideOne, sideTwo, sideThree) { var canvas = document.getElementById('triangle-canvas'); var ctx = canvas.getContext('2d'); var c

我试图创建一个函数,它在一个HTML画布中间画出三个给定长度的三角形,我认为这将是一个简单的HTML画布的介绍,我错了。 到目前为止,我已经看到了这一点,但侧面渲染不正确:

function drawTriangle(sideOne, sideTwo, sideThree) {
    var canvas = document.getElementById('triangle-canvas');
    var ctx = canvas.getContext('2d');

    var cx = canvas.width / 2;
    var cy = canvas.height / 4;

    var sideOneHeight = sideOne * (Math.sqrt(3) / 2);
    var sideTwoHeight = sideTwo * (Math.sqrt(3) / 2);

    ctx.beginPath();
    ctx.moveTo(cx, cy);
    ctx.lineTo(cx + 50, cy + sideOneHeight);
    ctx.lineTo(cx - 50, cy + sideTwoHeight);
    ctx.lineTo(cx, cy);
    ctx.fill();
    ctx.closePath();

}

有什么建议吗?

Set
Ax=0,Ay=0
,Set
Bx=R3,By=0
。第三点满足两个圆方程

(Cx-Ax)² + (Cy-Ay)² = R2²
(Cx-Bx)² + (Cy-By)² = R1²
给定所选的坐标,将

Cx² + Cy² = R2²
(Cx-R3)² + Cy² = R1²
区别何在

 2*Cx*R3 = R2²+R3²-R1²
它允许计算Cx和Cy

在代码中,它如下所示:

var canvas=document.getElementById('triangle-canvas');
var ctx=canvas.getContext('2d');
变量R1=120,R2=140,R3=90;
var Ax=0,Ay=0;
var Bx=R3,By=0;
变量Cx=(R2*R1+R3*R3-R1*R1)/(2*R3);
var Cy=Math.sqrt(R2*r2cx*Cx);
var Ox=canvas.width/2-Bx/2;
var Oy=帆布高度/2+Cy/2;
ctx.beginPath();
ctx.moveTo(Ox+Ax,Oy-Ay);
ctx.lineTo(Ox+Bx,Oy By);
ctx.lineTo(Ox+Cx,Oy-Cy);
ctx.closePath();
ctx.fillStyle=“黄金”;ctx.线宽=2;
ctx.stroke();ctx.fill()

设置
Ax=0,Ay=0
,设置
Bx=R3,By=0
。第三点满足两个圆方程

(Cx-Ax)² + (Cy-Ay)² = R2²
(Cx-Bx)² + (Cy-By)² = R1²
给定所选的坐标,将

Cx² + Cy² = R2²
(Cx-R3)² + Cy² = R1²
区别何在

 2*Cx*R3 = R2²+R3²-R1²
它允许计算Cx和Cy

在代码中,它如下所示:

var canvas=document.getElementById('triangle-canvas');
var ctx=canvas.getContext('2d');
变量R1=120,R2=140,R3=90;
var Ax=0,Ay=0;
var Bx=R3,By=0;
变量Cx=(R2*R1+R3*R3-R1*R1)/(2*R3);
var Cy=Math.sqrt(R2*r2cx*Cx);
var Ox=canvas.width/2-Bx/2;
var Oy=帆布高度/2+Cy/2;
ctx.beginPath();
ctx.moveTo(Ox+Ax,Oy-Ay);
ctx.lineTo(Ox+Bx,Oy By);
ctx.lineTo(Ox+Cx,Oy-Cy);
ctx.closePath();
ctx.fillStyle=“黄金”;ctx.线宽=2;
ctx.stroke();ctx.fill()
var c=document.getElementById(“myCanvas”);
var ctx=c.getContext(“2d”);
ctx.font=“20px新罗马时代”;
ctx.fillStyle=“黑色”;
ctx.textAlign=“中心”;
ctx.strokeStyle=“黑色”;
var canvasSize=[parseInt(c.width),parseInt(c.height)];
var _side_1=5,_side_2=3,_side_3=4//所有值均假定为厘米单位。
var系数=37.7952755906;
var sides=[_side_1,_side_2,_side_3];
sort(函数(a,b){返回a-b});
var半周长=(_侧_1+_侧_2+_侧_3)/2;
变量面积=数学sqrt(半周长*(半周长-_侧_1)*(半周长-_侧_2)*(半周长-_侧_3));
变量高度=((2*面积)/侧面[2])。精度(5);
var slopeOfBase=Math.sqrt(Math.pow(边[0],2])Math.pow(高度,2));
ctx.beginPath();
ctx.setLineDash([]);
ctx.moveTo((画布尺寸[0]/2-0.5*边[2]*系数),(画布尺寸[1]/2+0.5*高度*系数));
ctx.lineTo((画布尺寸[0]/2+0.5*边[2]*系数),(画布尺寸[1]/2+0.5*高度*系数));
ctx.fillText(“c=“+侧面[2]+”厘米),(画布尺寸[0]/2-0.5*侧面[2]*系数+画布尺寸[0]/2+0.5*侧面[2]*系数)/2,(画布尺寸[1]/2+0.5*高度*系数+画布尺寸[1]/2+0.5*高度*系数)/2+15);
ctx.lineTo((画布尺寸[0]/2+0.5*边[2]*系数-坡度基准*系数),(画布尺寸[1]/2-0.5*高度*系数));
ctx.fillText(“b=“+边[0]+”厘米),(画布尺寸[0]/2+0.5*边[2]*因子+画布尺寸[0]/2+0.5*边[2]*因子-坡度基*因子)/2+50,(画布尺寸[1]/2+0.5*高度*因子+画布尺寸[1]/2-0.5*高度*因子)/2);
ctx.lineTo((画布尺寸[0]/2-0.5*边[2]*系数),(画布尺寸[1]/2+0.5*高度*系数));
ctx.fillText(“a=“+边[1]+”厘米),(画布尺寸[0]/2+0.5*边[2]*系数-坡度基准*系数+画布尺寸[0]/2-0.5*边[2]*系数)/2-50,(画布尺寸[1]/2-0.5*高度*系数+画布尺寸[1]/2+0.5*高度*系数)/2);
ctx.stroke();
ctx.beginPath();
ctx.setLineDash([5]);
ctx.moveTo((画布尺寸[0]/2+0.5*边[2]*系数-坡度基准*系数),(画布尺寸[1]/2-0.5*高度*系数));
ctx.lineTo((画布尺寸[0]/2+0.5*边[2]*系数-坡度基准*系数),(画布尺寸[1]/2+0.5*高度*系数));
ctx.fillText(“h=“+高度+”厘米),(画布尺寸[0]/2+0.5*边[2]*系数-坡度基准*系数+画布尺寸[0]/2+0.5*边[2]*系数-坡度基准*系数)/2,(画布尺寸[1]/2-0.5*高度*系数+画布尺寸[1]/2+0.5*高度*系数)/2+20);
ctx.stroke()
var c=document.getElementById(“myCanvas”);
var ctx=c.getContext(“2d”);
ctx.font=“20px新罗马时代”;
ctx.fillStyle=“黑色”;
ctx.textAlign=“中心”;
ctx.strokeStyle=“黑色”;
var canvasSize=[parseInt(c.width),parseInt(c.height)];
var _side_1=5,_side_2=3,_side_3=4//所有值均假定为厘米单位。
var系数=37.7952755906;
var sides=[_side_1,_side_2,_side_3];
sort(函数(a,b){返回a-b});
var半周长=(_侧_1+_侧_2+_侧_3)/2;
变量面积=数学sqrt(半周长*(半周长-_侧_1)*(半周长-_侧_2)*(半周长-_侧_3));
变量高度=((2*面积)/侧面[2])。精度(5);
var slopeOfBase=Math.sqrt(Math.pow(边[0],2])Math.pow(高度,2));
ctx.beginPath();
ctx.setLineDash([]);
ctx.moveTo((画布尺寸[0]/2-0.5*边[2]*系数),(画布尺寸[1]/2+0.5*高度*系数));
ctx.lineTo((画布尺寸[0]/2+0.5*边[2]*系数),(画布尺寸[1]/2+0.5*高度*系数));
ctx.fillText(“c=“+侧面[2]+”厘米),(画布尺寸[0]/2-0.5*侧面[2]*系数+画布尺寸[0]/2+0.5*侧面[2]*系数)/2,(画布尺寸[1]/2+0.5*高度*系数+画布尺寸[1]/2+0.5*高度*系数)/2+15);
ctx.lineTo((画布尺寸[0]/2+0.5*边[2]*系数-坡度基准*系数),(画布尺寸[1]/2-0.5*高度*系数)