2017-05-31 41 views
1

我使用开始和endangle如下绘制的SVG圆的角度,如何找到某一点

document.getElementById("circle").setAttribute("d", describeArc(150, 150, 100, 180, 360)); 
      function getPathArc(center, start, end, radius) { 
         end = end - 0.0001; 
         var degree = end - start; 
         degree = degree < 0 ? (degree + 360) : degree; 
         var clockWise = (degree < 180) ? 0 : 1; 
         return getPiePath(center, degreeToLocation(start, radius, center), degreeToLocation(end, radius, center), radius, clockWise); 
      } 
      function getPiePath(center, start, end, radius, clockWise) { 
         return 'M ' + start.x + ' ' + start.y + ' A ' + radius + ' ' + radius + ' 0 ' + clockWise + ' 1 ' + end.x + ' ' + end.y; 
      };   
      function degreeToLocation(degree, radius, center) { 
        var radian = (degree * Math.PI)/180; 
        return { 
         'x' : Math.cos(radian) * radius + center.x, 
         'y': Math.sin(radian) * radius + center.y 
        }; 
      }   
      function describeArc(x, y, radius, startAngle, endAngle){ 
       var endAngle = endAngle - startAngle; 
       startAngle = startAngle <= 0 ? (360 + startAngle) % 360 : startAngle % 360; 
       endAngle = endAngle < 0 ? (360 + endAngle + startAngle) % 360 : Math.abs(endAngle + startAngle) % 360; 
        var direction = getPathArc({'x': x, 'y': y}, startAngle, endAngle, radius); 
        var d = direction; 
        return d;  
      } 

这里是样品https://jsfiddle.net/ndmsqmao/3/

我需要绘制了一个刻度线指定点的圆圈。

例如让我们考虑一下,

,如果它的值从50到100的意思是,我需要绘制66位值的一个刻度线..如何达致这开始?

enter image description here

+0

这会帮助(https://codepen.io/MitchJackson94 /笔/ vHzEf)? – evolutionxbox

+0

谢谢,但只显示了一个圆的角度...我需要显示的第40个值的意思,startAngle是180 endAngle是36开始值是50和最终值是100意味着我需要指出第66个值 –

+0

@evolutionxbox我也试图计算一些这是从我身边缺少的确切点的程度 如果值是75意味着它应该返回90度。 ((((Math.abs(value)/(100))*(360)))+ 180; –

回答

1

我希望我明白你的问题......

var min = 50; 
var max = 100; 
var value = 66; 

var angle = 180/(max-min)*(value-min)+180; 

console.log (angle); 
+0

您好感谢, 刚才我发现,计算.. 下面的计算做工精细, VAR totalDegree = endAngle - 由startAngle; totalDegree = totalDegree <0? (totalDegree + 360):totalDegree; var degree(value *(degree /(maximumValue - minimumValue)))+ startAngle; –

2

希望这有助于...

var minValue = 50, maxValue = 100, value = 66, 
    minAngle = 180, maxAngle = 360, angle; 

angle = minAngle + (value - minValue)/(maxValue - minValue) * (maxAngle - minAngle); 

alert(angle); 
+1

如果startAngle和endAngle相同,我们无法获得某个点的角度。为此计算.. 我试过这个计算这一个工作正常, var degree = endAngle - startAngle; degree = degree <0? (学位+ 360):学位; return(value *(degree /(maximumValue - minimumValue)))+ startAngle; –