Graph 在Google Charts或Plot.ly中检测线是否相交

Graph 在Google Charts或Plot.ly中检测线是否相交,graph,google-visualization,plotly.js,Graph,Google Visualization,Plotly.js,我见过声称输入坐标的脚本,它会告诉你它们是否相交,但我有一个X,Y值数组,用于两条“线”,但我如何循环通过这些点来确定它们是否相交 我已经包括了一张我的图的照片,正如你们所看到的,最终我的图交叉了,我只想知道我的值是否曾经交叉(相交) 我如何通过这个来找出是否发生过任何交叉 var Test = { x: [8043, 10695, 13292, 17163, 20716, 25270], y: [1000, 274, 100, 27.4, 10, 2.74], fil

我见过声称输入坐标的脚本,它会告诉你它们是否相交,但我有一个X,Y值数组,用于两条“线”,但我如何循环通过这些点来确定它们是否相交

我已经包括了一张我的图的照片,正如你们所看到的,最终我的图交叉了,我只想知道我的值是否曾经交叉(相交)

我如何通过这个来找出是否发生过任何交叉

var Test = {
 x: [8043, 10695, 13292, 17163, 20716, 25270],
 y: [1000,   274,   100,  27.4,    10,  2.74],
 fill: 'tozeroy',
 type: 'scatter',
 name: 'Test'
};


var Test2 = {
 x: [8043, 10063, 12491, 16081, 19408, 23763],
 y: [1000,   274,   100,  27.4,    10,  2.74],
 fill: 'tozeroy',
 type: 'scatter',
 name: 'Test2'
};

var Test3 = {
 x: [4700,  5943,  7143,  8841, 10366, 13452],
 y: [1000,   274,   100,  27.4,    10,  2.74],
 fill: 'tozeroy',
 type: 'scatter',
 name: 'Test3'
};


var data = [Test, Test2, Test3];

var layout = {
width: 700,
height: 700,
xaxis: {
 type: 'log',
 range: [3,5] 
},
yaxis: {
 type: 'log',
 range: [-2,3] 
}
})

路径截获 这个答案是对你最讨厌的问题的后续回答

下面的代码片段将找到表中路径的截取,如本问题示例数据中的结构,使用修改后的截取函数从上述答案的注释中的答案链接

注意我假设示例数据中的每个表(如
Test
)表示一条曲线(路径作为一组线段),并且截距不在表内,而是在表之间

碱性溶液 它通过检查一个表中的每个线段与另一个表中的每个线段并将所有截取存储在一个数组中来实现

注意如果在直线的起点或终点处发现截距,则截距测试包括这些点时,截距可能会在截距数组中出现两次

注意平行线,即使它们有匹配的起点和/或终点,也不算作截距

该示例针对示例数据运行,并具有详细的控制台输出,以在需要时指导您处理正在争论的任何数据集。可以删除控制台日志而不会产生不良影响

var测试={
x:[80431069513292171632071625270],,
y:[1000274100,27.4,10,2.74],,
填充:“tozeroy”,
键入:“散布”,
名称:“测试”
};
var Test2={
x:[80431006312491160811940823763],
y:[1000274100,27.4,10,2.74],,
填充:“tozeroy”,
键入:“散布”,
名称:“Test2”
};
var Test3={
x:[47005943714388411036613452],
y:[1000274100,27.4,10,2.74],,
填充:“tozeroy”,
键入:“散布”,
名称:“Test3”
};
//从此处复制到结束注释并放入页面(代码库)
//输出到控制台(例如console.log)的行就是为了帮助您
//并且可以移除
常量lineIntercepts=(()=>{
常数点=(x,y)=>({x,y});
常量行=(p1,p2)=>({p1,p2});
const Vector=line=>Point(line.p2.x-line.p1.x,line.p2.y-line.p1.y);
功能拦截SEGS(第1行、第2行){
常数a=向量(第1行),b=向量(第2行);
常数c=a.x*b.y-a.y*b.x;
如果(c){
常数e=点(line1.p1.x-line2.p1.x,line1.p1.y-line2.p1.y);
常数u=(a.x*e.y-a.y*e.x)/c;
如果(u>=0&&u=0&&u点(t.x[idx],t.y[idx]);
constlinefromtable=(t,idx)=>Line(PointFromTable(t,idx++),PointFromTable(t,idx));
返回函数(表1、表2){
常量结果=[];
var i=0,j;
而(i<表1.x.长度-1){
const line1=LineFromTable(表1,i);
j=0;
而(j<表2.x.长度-1){
常量line2=LineFromTable(表2,j);
常量点=截距分段(第1行、第2行);
如果(点){
结果:推({
描述:“${table1.name}”行seg索引${i}-${i+1}截取“${table2.name}”行seg索引${j}-${j+1}”,
//可以替换说明(上一行)
//有关资料如下:
/*删除此行以包含每个截取的附加信息
TableName 1:table1.name,
TableName 2:table2.name,
表1:i,
表1\u PointEndIdx:i+1,
表2:j,
表2_PointEndIdx:j+1,
然后拆下这条线*/
x:第x点,
y:点,y,
});
}
j++;
}
i++;
}
如果(结果长度){
log(“发现“+table1.name+”和“+table2.name+””)的“+results.length+”截取;
控制台日志(结果);
返回结果;
} 
log(“未找到对“'+table1.name+”和“'+table2.name+””的截取”;
}
})();
//代码结束
//测试和示例代码只从这里开始。
var res1=线路截获(测试,测试2);
var res2=线路截获(测试,测试3);
var res3=线路截获(Test2,Test3);

你真是个疯狂的天才!非常感谢你,你救了我。这将帮助我制作UVC照明,以杀死细菌和病毒,因为绘图将帮助我实时检测并准确地从扫描中获取数据。
Plotly.newPlot('myDiv', data,layout);