gpt4 book ai didi

Highcharts - 获取交叉系列的交叉点

转载 作者:行者123 更新时间:2023-12-04 00:54:18 27 4
gpt4 key购买 nike

我目前正在尝试提取特定系列 (x) 系列 (a,b,c,d) 的多个交叉点。我似乎找不到任何可以帮助我完成这项任务的功能。

我最好的选择是测量 x 中每个点与 a、b、c、d 中每个点的距离...并假设当距离低于某个阈值时,该点必须是交叉点。我认为这种方法计算量太大而且看起来“脏”。我相信一定有更简单或更好的方法,甚至可能在 highcharts 自己的 API 中运行。

我搜索了各种资源和站点,但我真的找不到任何解决方案。一些人将回归作为他们解决方案的一部分。我不太了解回归,但也许回归是唯一的方法?

此外,由于我们系列的“复杂”性质,我也认为回归相当难以利用。

最佳答案

这是一个经过深入研究的 problem .不过,在优化之前,我会尝试“计算量大”的蛮力方法。借用 excellent answers here ,我编写了与 highcharts 的快速集成(fiddle here):

get_line_intersection = function(p0,p1,p2,p3)
{
var p0_x = p0.x;
var p0_y = p0.y;
var p1_x = p1.x;
var p1_y = p1.y;
var p2_x = p2.x;
var p2_y = p2.y;
var p3_x = p3.x;
var p3_y = p3.y;

var s1_x, s1_y, s2_x, s2_y;
s1_x = p1_x - p0_x; s1_y = p1_y - p0_y;
s2_x = p3_x - p2_x; s2_y = p3_y - p2_y;

var s = (-s1_y * (p0_x - p2_x) + s1_x * (p0_y - p2_y)) / (-s2_x * s1_y + s1_x * s2_y);
var t = ( s2_x * (p0_y - p2_y) - s2_y * (p0_x - p2_x)) / (-s2_x * s1_y + s1_x * s2_y);

if (s >= 0 && s <= 1 && t >= 0 && t <= 1)
{
return [p0_x + (t * s1_x),p0_y + (t * s1_y)];
}

return false;
}

$(function () {
$('#container').highcharts({
series: [{
name: 'line1',
data: $.map(new Array(10), function(){return Math.random() * 10;})
}, {
name: 'line2',
data: $.map(new Array(10), function(){return Math.random() * 10;})
}, {
name: 'intersect',
data: [],
type: 'scatter'
}
]
}, function(chart){
var s0 = chart.series[0].points;
var s1 = chart.series[1].points;
var s2 = chart.series[2];
var n0 = s0.length;
var n1 = s1.length;
var i,j,isect;
for (i = 1; i < n0; i++){
for (j = 1; j < n1; j++){
if (isect = get_line_intersection(s0[i-1],s0[i],
s1[j-1],s1[j])){
s2.addPoint(isect, false, false);

}
}
}
chart.redraw();
});
});

enter image description here

关于Highcharts - 获取交叉系列的交叉点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22426603/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com