我正在使用svg图形绘制饼图。我得到了一个饼图应该是-例如277度-和直径-例如200px-我需要画一个277度的圆。
使用SVG图形,我需要将277度的角度解析到圆的终点。
我在数学方面不是最棒的,所以我提出了一个公式/javascript函数,它允许我取一个度数值,并给出一个x,y圆的结束点。
我的Javascript函数(在底部)能否正确地将度数解析为正确的点你能帮我开发我的算法,从一个度数值中获得坐标吗或者有一个现有的算法,我可以使用我不知道?
我的算法:(我需要帮助)
我得到的值是:圆直径:200px,圆大小:277度。
我需要277在围绕0,0点旋转时结束的点。
277结束于第一象限,这意味着我需要使用sin(对吗?)
我现在知道的三角形的值是:斜边=100px(半径),角度=7度(277-270)。
sin(7)=o/100;
0.1219=O/100;
O=12.2;
因此y点是12.2(为了我的缘故,0是左上角,所以它的真的是midy-x=100-12.2=87.8;(对吗?)
现在要确定x pos,我使用cos(对吗?).
cos(7)=A/100;
A=99.25;
因此x点为99.25或100-99.25=0.75;
所以277度的x,y坐标是0.75,87.8是这样吗?
所以在代码中,这个算法是:

function resolveToPoint( deg, diameter )
{
    if ( deg <= 0)
        return 0;

    var x     = 0;
    var y     = 0;
    var angle = 0;
    var rad   = diameter/2;
    var midX  = rad;
    var midY  = rad;

    if (deg <= 90)
        angle = 90 - deg;
    else if (deg <= 180)
        angle = deg - 90;
    else if (deg <= 270)
        angle = deg - 180;
    else if (deg <= 360)
        angle = deg - 270;

    // Q: Will I ALWAYS use cos to determine the x & sin for the x NO MATTER what quadrant the angle is in??
    x = Math.cos(angle) * rad;
    y = Math.sin(angle) * rad;

    if (deg <= 90)
    {
        x = midX + x;
        y = midY - y;
    }
    else if (deg <= 180)
    {
        x = midX + x;
        y = midY + y;
    }
    else if (deg <= 270)
    {
        x = midX - x;
        y = midY + y;
    }
    else if (deg <= 360)
    {
        x = midX - x;
        y = midY - y;
    }

    return {mX: x, mY: y};
}

然后我将在svg中使用它,如下所示:
function outputPiegraph( point, rad, diameter )
{
    var svg = '<svg width="%spx" height=""%spx" id='pie' style="background-color: green;">
    <path d="M%spx,%spx L%spx, %spx A%spx,"%spx 1 1,1 %spx,%spx z"
     fill="red" stroke="blue" stroke-width="2" />"
</svg>';


    return sprintf(svg, diameter, diameter, point.mX, point.mY, rad, rad, rad, diameter);
}

最佳答案

这是从极坐标到笛卡尔坐标的简单转换:

function resolveToPoint(deg, diameter) {
    var rad = Math.PI * deg / 180;
    var r = diameter / 2;
    return {mX: r * Math.cos(rad), mY: r * Math.sin(rad)};
}

http://en.wikipedia.org/wiki/Polar_coordinates#Converting_between_polar_and_Cartesian_coordinates

关于javascript - 算法:用于将度数解析为x,y的功能,以绘制SVG饼图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8796690/

10-10 00:48