这是更小的HTML,帆布问题并且更一般的数学问题。我在这里发布它是因为它使用CANVAS原型,并且仍然是我认为有人可以回答的一般编程问题。这里是基本的想法:我想绘制一个10像素厚的线,但我不想使用标准lineTo并设置笔触宽度。我想要使用beginPath和lineTo实际绘制线条的边框。原因在于,这实际上是针对AS3项目的,并且使用这种方法可以让我们有一个行笔划和填充。所以旋转画布和那种性质的东西是不可能的。我只需要弄清楚如何计算线的正确的x,y坐标。计算的x,旋转线段的y坐标绘制在画布
在下面的代码为线的顶部坐标。我基本上想要取这个坐标,每个坐标增加10到y轴,这将给我这条线的底部的返回坐标。当然,线条的每一部分都是旋转的,因此计算线条底部的坐标已证明非常棘手。我希望有人能帮忙。
一旦运行示例代码,这个问题应该是显而易见的。该行不正确。对于相对较小的线段旋转,似乎可行,但随着旋转角度变得更加严重,x,y坐标计算不正确。
<!doctype html>
<html>
<body>
<canvas id="canvas" width="800" height="600">
</canvas>
<script type="text/javascript">
var coords = [
{x:78,y:183},
{x:130,y:183},
{x:237,y:212},
{x:450,y:213},
{x:517,y:25},
{x:664,y:212},
{x:716,y:212}
];
var coordsBck = [];
for(i = 0; i < coords.length; i++) {
var c1, c2, r;
c1 = coords[i];
if(i < coords.length - 1) {
c2 = coords[i + 1];
r = Math.atan2((c2.y - c1.y),(c2.x - c1.x));
console.log(c1.x, c1.y, c2.x, c2.y, (r * 180/Math.PI));
}
else
{
r = 00;
}
var d = r * 180/Math.PI;
var cos = Math.cos(r);
var sin = Math.sin(r);
var x = cos * 0 - sin * 10;
var y = sin * 0 + cos * 10;
coordsBck.push({x: c1.x + x, y: c1.y + y});
}
while(coordsBck.length > 0)
{
coords.push(coordsBck.pop());
}
var ctx = document.getElementById("canvas").getContext("2d");
ctx.beginPath();
for(i = 0; i < coords.length; i++) {
var line = coords[i];
console.log(i, line.x, line.y);
if(i == 0)
{
ctx.moveTo(line.x, line.y);
}
else
{
ctx.lineTo(line.x, line.y);
}
}
ctx.fill();
function t(o) {
return "x: " + o.x + ", y: " + o.y;
}
</script>
</body>
</html>
我的确需要端盖,但是看着你的答案被让我帮了我不少意识到我需要把线段更有点像长方形,这有助于确定我最终需要的附加坐标。所以谢谢。:) – WesleyJohnson
我没有最终使用这个,但它确实帮助我到达我需要的地方,所以我选择这个作为答案。为了看看我想出了什么,我在下面回答了我自己的问题。或者你可以查看jsfiddle:http://jsfiddle.net/WesleyJohnson/sAaM9/1/ – WesleyJohnson
ho,并且由于我正在研究那些时间,你想知道如何做一个光滑的关节?因为你可能已经注意到两个没有相同斜率的线段有一个可怕的关节,只有矩形图(PS1的样子是=)) – GameAlchemist