Это не вопрос HTML, CANVAS, а скорее вопрос математики.Я разместил его здесь, потому что он создан на прототипе с использованием CANVAS и все еще является своего рода общим вопросом программирования, на который, я думал, кто-то может ответить.Вот основная идея: я хочу нарисовать линию толщиной 10 пикселей, но я не хочу использовать стандартную линию для установки ширины обводки.Я хочу на самом деле нарисовать границу линии, используя beginPath и lineTo.Причина в том, что это на самом деле для проекта AS3, и использование этого метода позволяет нам получить штрих и заливку.Так что о вращении холста и тому подобного не может быть и речи.Мне просто нужно выяснить, как рассчитать правильные координаты 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>