Javascript 算法:用于将度解析为x、y以绘制SVG饼图的函数

Javascript 算法:用于将度解析为x、y以绘制SVG饼图的函数,javascript,html,algorithm,svg,Javascript,Html,Algorithm,Svg,我正在使用SVG图形绘制饼图。我得到了一个饼图应该是的度数-例如277度-和直径-例如200px-我需要画一个277度的圆 使用SVG图形,我需要将277度解析为圆的终点 我在数学方面不是最棒的,所以我提出了一个公式/javascript函数,它允许我取一个度值&提出一个圆结束的x,y点 我的Javascript函数(在底部)能正确地将度解析到正确的点吗?你能帮我开发从度值获得坐标的算法吗?或者我可以使用一个我不知道的现有算法 我的算法:(我需要帮助) 所以我得到的值是:圆直径:200px,圆大

我正在使用SVG图形绘制饼图。我得到了一个饼图应该是的度数-例如277度-和直径-例如200px-我需要画一个277度的圆

使用SVG图形,我需要将277度解析为圆的终点

我在数学方面不是最棒的,所以我提出了一个公式/javascript函数,它允许我取一个度值&提出一个圆结束的x,y点

我的Javascript函数(在底部)能正确地将度解析到正确的点吗?你能帮我开发从度值获得坐标的算法吗?或者我可以使用一个我不知道的现有算法

我的算法:(我需要帮助)
所以我得到的值是:圆直径:200px,圆大小:277度

  • 我需要277在绕点0,0旋转时结束的点
  • 277在第1象限结束,这意味着我需要使用sin(正确吗?)
  • 我现在知道的三角形的值是:斜边=100px(半径),角度=7度(277-270)

    sin(7)=o/100; 0.1219=o/100; o=12.2

  • 因此,y点是12.2(看在我的份上,0,0是左上角,所以它实际上是midY-x=100-12.2=87.8;(这是正确的吗?)

  • 现在,为了确定x位置,我使用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};
}
函数解析点(度、直径)
{

如果(DEG

如果你考虑单位圆,那么给定的(基于弧度的)角度的X坐标由余弦给出,同样,y坐标由正弦给出。因此,你可以很容易地解如下:

function resolveToPoint(deg, diameter) {  
  var radians = angle_in_degrees / 180 * Math.PI;
  var x = diameter / 2 * cos(radians);
  var y = diameter / 2 * sin(radians);

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

如果考虑单位圆,则给定的(基于弧度的)角度的X坐标由余弦给出,同样,y坐标由正弦给出。因此,您可以如下容易地解决这个问题。

function resolveToPoint(deg, diameter) {  
  var radians = angle_in_degrees / 180 * Math.PI;
  var x = diameter / 2 * cos(radians);
  var y = diameter / 2 * sin(radians);

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

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

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)};
}

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

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)};
}

饼图几乎总是个坏主意。改用条形图。饼图几乎总是个坏主意。改用条形图。我需要将cos和sin分别更改为Math.cos和Math.sin以使其运行…我需要将cos和sin分别更改为Math.cos和Math.sin以使其运行。。。