在highcharts

时间:2017-11-09 20:07:35

标签: charts highcharts graphics position

我正在进行一项实验,以确定几何边界是否会影响代理商在某些经济游戏中的协调。

我使用以下方法将单位正方形的图形随机分成两部分:

在python中(不是超级相关)......

  1. 创建一个自我避免的随机漫步并存储所访问的点阵
  2. 抖动晶格点
  3. 将抖动点格式化为highcharts系列
  4. 与Highcharts(更相关)......

    1. 将抖动的点渲染为类型“areaspline”
    2. 我还添加了一些均匀分散的点(显示为圆圈,即玩家)。

      所有这些产生如下图表:

      Example

      这正是我想要的。

      我的问题是,如何识别哪个分散点位于哪个分区?我的直觉是,当我调用areaspline时,HighCharts必须识别要填充的点集,并且我应该能够找到该集合和我的散点集的交集。假设这是正确的,我找不到返回填充点集的方法。如果不对,那我真的输了!请指教。

2 个答案:

答案 0 :(得分:0)

我认为你最好使用python来查找哪个分散点在哪个分区中。应该可以将散点与坐标(x_scatter,y_scatter)与相同x值的线进行比较。那是;

if x_scatter == x_line and y_scatter > y_line:
  scatter point is in white portion of graph
elif x_scatter == x_line and y_scatter < y_line:
  scatter point is in the gray portion of the graph.

我之所以这么说是因为据我所知,高图表没有固有的方法可以判断一个点是否与另一个系列点重叠。当然可以用javascript来完成这个计算,但是因为你已经在python中知道了这些变量,所以看起来像是不必要的额外工作。

答案 1 :(得分:0)

请参阅此实时演示(点击并拖动以创建区域):http://jsfiddle.net/vsbrwgso/

它使用光线投射算法https://en.wikipedia.org/wiki/Point_in_polygon)来查找路径中的点。

var pointInPolygon = function(point, vs) {
  // ray-casting algorithm based on
  // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html

  var x = point[0],
    y = point[1];

  var inside = false;
  for (var i = 0, j = vs.length - 1; i < vs.length; j = i++) {
    var xi = vs[i][0],
      yi = vs[i][1];
    var xj = vs[j][0],
      yj = vs[j][1];

    var intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
    if (intersect) inside = !inside;
  }

  return inside;
};

您应该根据需要调整此示例(删除交互性,使用areaspline / polygon系列而不是用户选择等)。