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