這是更小的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