Javascript 找到位于圆弧起始角和结束角之间的点。

Javascript 找到位于圆弧起始角和结束角之间的点。,javascript,d3.js,math,geometry,Javascript,D3.js,Math,Geometry,我试图找到圆弧A扇区内的点。我正在使用D3在svg上绘制圆弧,并在一个圆圈中绘制点。当我移动带有起始角或结束角的圆弧时,限制在圆弧上的点会发生变化,某些属性表示颜色或不透明度。 我正在做的是,我正在计算所有点(X,Y)和中心(CX,CY)的角度(p_A),并试图检查这些点是否位于弧手的角度之间,即星形S_A和终止角e_A。这是我使用的公式 P_A = atan(Y-CY,X-CX)*180.0/PI; 然后我做检查: if (P_A < E_A && P_A >

我试图找到圆弧A扇区内的点。我正在使用D3在svg上绘制圆弧,并在一个圆圈中绘制点。当我移动带有起始角或结束角的圆弧时,限制在圆弧上的点会发生变化,某些属性表示颜色或不透明度。

我正在做的是,我正在计算所有点(X,Y)和中心(CX,CY)的角度(p_A),并试图检查这些点是否位于弧手的角度之间,即星形S_A和终止角e_A。这是我使用的公式

P_A = atan(Y-CY,X-CX)*180.0/PI;
然后我做检查:

if (P_A < E_A && P_A > S_A)
{
/// SAY Color of Points are changing.
}

但是它不能正常工作。。没有这样的情况发生。

对于角度进近,您应该使用
atan2
功能并考虑循环行为(当扇区包括180或360边界时)

协调方法:

做向量

s = (Cos(startangle), Sin(startangle))
e = (Cos(endangle), Sin(endangle))
对于每个点,生成向量

 d = (p.x - center.x, p.y - center.y)
并使用叉积检查
d
相对于
s
逆时针方向,以及
d
相对于
e
顺时针方向

 if (s.x * d.y - s.y * d.x >= 0)  && (e.x * d.y - e.y * d.x <= 0) 
     then point lies inside sector

如果(s.x*d.y-s.y*d.x>=0)和(e.x*d.y-e.y*d.x您试图修改某些点的属性的代码在哪里?为什么它只覆盖圆周率角度?为什么不包括形成一个圆的整个2*PI。开始和结束角度在x轴或y轴下都工作得很好,但不是2*PI。当我们反转开始和结束角度的方向时,它也会改变行为……例如具有任意端点的大圆弧可以使用下一个圆弧:
 if (s.x * d.y - s.y * d.x >= 0)  && (e.x * d.y - e.y * d.x <= 0) 
     then point lies inside sector