Javascript 鼠标是否在圆扇区内? 短版

Javascript 鼠标是否在圆扇区内? 短版,javascript,html,canvas,geometry,Javascript,Html,Canvas,Geometry,简而言之,如何检测鼠标光标是否位于HTML5画布上绘制的圆的扇区内 长版本 我有所有这些投票数据,并希望将其显示为饼图,随着数据的输入而更新,因此我有一个PHP脚本,用于计算段大小,并生成一个javascript,通过$.getScript function toRadians(deg) { return deg * Math.PI / 180 } function drawpiechart() { ctx.fillStyle='#fdbb30'; ctx.beginPath()

简而言之,如何检测鼠标光标是否位于HTML5画布上绘制的圆的扇区内

长版本 我有所有这些投票数据,并希望将其显示为饼图,随着数据的输入而更新,因此我有一个PHP脚本,用于计算段大小,并生成一个javascript,通过
$.getScript

function toRadians(deg) { 
return deg * Math.PI / 180 
 } 

function drawpiechart() { 

ctx.fillStyle='#fdbb30'; 
ctx.beginPath(); 
ctx.moveTo(cx,cy); 
ctx.arc(cx,cy,125,0,toRadians(65.4545454545)); 
ctx.lineTo(cx,cy); 
ctx.closePath(); 
ctx.fill();  

ctx.fillStyle='#0087dc'; 
ctx.beginPath(); 
ctx.moveTo(cx,cy); 
ctx.arc(cx,cy,125,toRadians(65.4545454545),toRadians(98.1818181818)); 
ctx.lineTo(cx,cy); 
ctx.closePath(); 
ctx.fill();  

ctx.fillStyle='#EEEEEE'; 
ctx.beginPath(); 
ctx.moveTo(cx,cy); 
ctx.arc(cx,cy,125,toRadians(98.1818181818),toRadians(360)); 
ctx.lineTo(cx,cy); 
ctx.closePath(); 
ctx.fill();  

}
这是一个图表代码

我以前也做过,但不知道如何将其应用于某个行业

我还研究了如何使用a,但不知道如何在各个部门之间进行转换,因此每个部门都被单独对待

有没有一种方法可以在没有库的情况下实现这一点,或者我应该考虑使用类似的方法?

下面的代码来自,但经过重构,可以使用角度而不是点

function isInsideSector(point, center, radius, angle1, angle2) {
  function areClockwise(center, radius, angle, point2) {
    var point1 = {
      x : (center.x + radius) * Math.cos(angle),
      y : (center.y + radius) * Math.sin(angle)
    };
    return -point1.x*point2.y + point1.y*point2.x > 0;
  }

  var relPoint = {
    x: point.x - center.x,
    y: point.y - center.y
  };

  return !areClockwise(center, radius, angle1, relPoint) &&
         areClockwise(center, radius, angle2, relPoint) &&
         (relPoint.x*relPoint.x + relPoint.y*relPoint.y <= radius * radius);
}
函数isInsideSector(点、中心、半径、角度1、角度2){
函数为顺时针(中心、半径、角度、点2){
变量点1={
x:(中心x+半径)*数学cos(角度),
y:(中心y+半径)*数学sin(角度)
};
return-point1.x*point2.y+point1.y*point2.x>0;
}
变量relPoint={
x:点x-中心x,
点,点,点,点
};
返回!A顺时针(中心、半径、角度1、点)&&
A顺时针(中心、半径、角度2、点)&&

(relPoint.x*relPoint.x+relPoint.y*relPoint.y@bosonix我以前没有看到过,谢谢,或者只是在最后定义的路径上使用本机方法
ctx.isPointInPath(x,y)
(为每个扇区重新定义,无需重新绘制)@Epistemex这太令人惊讶了,我现在得到了一个非常好的答案,谢谢。但是我不知道第二个函数中的角度和点2应该是什么。不管怎样,现在算出它算出了
center.y+radius*Math.sin(angle)
需要是
(center.y+radius)*Math.sin angle
,同样,x也需要是。