查找位于ARC的“开始角度”和“结束角度”之间的点。

时间:2018-07-26 02:39:18

标签: javascript d3.js math geometry

我试图找到位于ARC扇区A内的点。我正在使用D3在svg上绘制圆弧,并在绘制点的圆中绘制圆弧。当我以起始角度或终止角度移动圆弧时,限制在ARC上的点会更改某些属性,例如颜色或不透明度。 enter image description here

我正在做的是,我正在计算所有点(X,Y)与中心(CX,CY)的角度(P_A),并尝试检查这些点是否位于ARC手的角度之间,即startAngle S_A和end Angle 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.
}

我在D3中用于生成ARC的代码如下所示

    var startAng = 20;
    var arcWidth = 1.5;

    var vis = Space.append("svg")
    var pi = Math.PI;

    var arc = d3.svg.arc()
      .innerRadius(0)
      .outerRadius(radiusC)
      .startAngle(S_A* (pi/180)) //converting from degs to radians
      .endAngle(E_A) //just radians

    vis.attr("width", "400").attr("height", "400") // Added height and width so arc is visible
      .append("path")
      .attr("d", arc)
      .attr("fill", "white")
      .style("stroke","black")
      .style("opacity",0.2)
      .attr("transform", "translate(200,200)");

但是它不能正常工作。什么也没发生。

1 个答案:

答案 0 :(得分:2)

对于角度接近,您应该使用atan2函数并考虑循环行为(扇区包含180或360边界时)

协调方法:

制作向量

s = (Cos(startangle), Sin(startangle))
e = (Cos(endangle), Sin(endangle))

为每个点制作矢量

 d = (p.x - center.x, p.y - center.y)

并使用叉积检查d相对于s的逆时针方向是否为de相对于 if (s.x * d.y - s.y * d.x >= 0) && (e.x * d.y - e.y * d.x <= 0) then point lies inside sector 的逆时针方向为时(顺时针)

var mysql      = require('mysql')
var connection = mysql.createConnection({
  host     : 'xxxx.xxxc.ap-northeast-1.rds.amazonaws.com',
  port      :  '3306',
  user     : 'dbusername',
  password : 'passwords',
  database : 'dbname'
})

connection.connect(function(err){

if(!err) {
    console.log("connected ... ")
} else {
    console.log(err)
}
});