如何通过画布的最大行限制?

时间:2016-10-07 08:23:24

标签: javascript html5-canvas line

我有http://deck.net/4488411c38b84b496a79f7eafb877a25,当我输入第3条时,编号为200.它不能生成整个内容。我想要它,并想知道是否有任何阻止这种情况发生?

我正在使用Bridge,所以这里是我的桥码:

context.BeginPath();
    context.MoveTo(pos.X, pos.Y);
    for (int n = 0; n < nShapes; n++)
    {
        for (int n2 = 0; n2 < sides; n2++)
        {
            pos.X += (Math.Sin(direction * (Math.PI/180)) * sidesLength);
            pos.Y += (Math.Cos(direction * (Math.PI/180)) * sidesLength);
            context.LineTo(pos.X, pos.Y);
            direction += (360 / sides);
            direction %= 360;
        }
        direction += 360/nShapes;
    }
    context.Stroke();
}

这是javascript:

context.beginPath();
            context.moveTo(pos.x, pos.y);
            for (var n = 0; n < Demo.Program.nShapes; n = (n + 1) | 0) {
                for (var n2 = 0; n2 < Demo.Program.sides; n2 = (n2 + 1) | 0) {
                    pos.x += (Math.sin(direction * (Math.PI / 180)) * sidesLength);
                    pos.y += (Math.cos(direction * (Math.PI / 180)) * sidesLength);
                    context.lineTo(pos.x, pos.y);
                    direction += ((((Bridge.Int.div(360, Demo.Program.sides)) | 0))) | 0;
                    direction %= 360;
                }
                direction += (Bridge.Int.div(360, Demo.Program.nShapes)) | 0;
            }
            context.stroke();

Bridge.Int.div是int(s)的c#的除以等价。

1 个答案:

答案 0 :(得分:1)

Ints和Doubles不能很好地混合。

问题在于您使用的类型。 sidesnShapes是整数,directiondouble,因此当您添加direction += 360 / nShapes时,类型转换直到右侧完成后才会发生。 360/200 = 1.8但是当您使用int时,实际结果为360/200 = 1,因此您无法完成360,但仍可获得200个形状。

要解决此问题,只需确保右侧的正确类型。

direction = 360/(double)nShapes;  // Just need one double to force right 
                                  // side to the correct type

或另类首选方式

direction = 360.0/nShapes; // adds without rounding down

.0强制该值为float(在c#的情况下为double),因此该行的右侧现在具有正确的类型且没有舍入错误。