Graph Flot:如何在给定x坐标的直线上找到y坐标

Graph Flot:如何在给定x坐标的直线上找到y坐标,graph,flot,point,intersection,Graph,Flot,Point,Intersection,我正在使用Flot图,我正在设置各种交互元素。 其中一个元素是用户输入任意x值的元素(根据具体情况,它实际上可能是x值或y值,但为简单起见,我们假设它始终是x轴值),我需要在我绘制的直线上输出相应的y坐标。我觉得这应该有点简单,所以如果答案是显而易见的,我很抱歉。请注意,输入值可能不是flot用来创建线的数组中的“点”(尽管它可以) 您还可以想象x=[用户输入,不一定是整数]处的一条垂直线在某个点与另一个直线系列相交。我需要找到交叉点。我试着上传一张照片,但是我没有足够的声望点数。你的代数怎么样

我正在使用Flot图,我正在设置各种交互元素。 其中一个元素是用户输入任意x值的元素(根据具体情况,它实际上可能是x值或y值,但为简单起见,我们假设它始终是x轴值),我需要在我绘制的直线上输出相应的y坐标。我觉得这应该有点简单,所以如果答案是显而易见的,我很抱歉。请注意,输入值可能不是flot用来创建线的数组中的“点”(尽管它可以)

您还可以想象x=[用户输入,不一定是整数]处的一条垂直线在某个点与另一个直线系列相交。我需要找到交叉点。我试着上传一张照片,但是我没有足够的声望点数。

你的代数怎么样

实际上,弗洛特的例子中有一个例子。如果您查看该页面的源代码,您将看到以下内容(我添加了解释注释):

//按x方向查找最近的点
//循环序列数据,直到找到点为止
//在您感兴趣的x值之后(本代码中的位置x)
对于(j=0;jpos.x){
打破
}
}
//现在插入
//这就是代数的乐趣!
变量y,
p1=series.data[j-1],//x前面的点
p2=系列数据[j];//指向你的x
如果(p1==null){
y=p2[1];//如果之前没有点,只需获取y值
}else if(p2==null){
y=p1[1];//如果之后没有点,只需得到y值
}否则{
y=p1[1]+(p2[1]-p1[1])*(pos.x-p1[0])/(p2[0]-p1[0]);
//这是代数位,见下文
}
在最后一个例子中,使用的等式是。数学不是很棒吗?

你的代数怎么样

实际上,弗洛特的例子中有一个例子。如果您查看该页面的源代码,您将看到以下内容(我添加了解释注释):

//按x方向查找最近的点
//循环序列数据,直到找到点为止
//在您感兴趣的x值之后(本代码中的位置x)
对于(j=0;jpos.x){
打破
}
}
//现在插入
//这就是代数的乐趣!
变量y,
p1=series.data[j-1],//x前面的点
p2=系列数据[j];//指向你的x
如果(p1==null){
y=p2[1];//如果之前没有点,只需获取y值
}else if(p2==null){
y=p1[1];//如果之后没有点,只需得到y值
}否则{
y=p1[1]+(p2[1]-p1[1])*(pos.x-p1[0])/(p2[0]-p1[0]);
//这是代数位,见下文
}
在最后一个例子中,使用的等式是。数学不是很棒吗?

你的代数怎么样

实际上,弗洛特的例子中有一个例子。如果您查看该页面的源代码,您将看到以下内容(我添加了解释注释):

//按x方向查找最近的点
//循环序列数据,直到找到点为止
//在您感兴趣的x值之后(本代码中的位置x)
对于(j=0;jpos.x){
打破
}
}
//现在插入
//这就是代数的乐趣!
变量y,
p1=series.data[j-1],//x前面的点
p2=系列数据[j];//指向你的x
如果(p1==null){
y=p2[1];//如果之前没有点,只需获取y值
}else if(p2==null){
y=p1[1];//如果之后没有点,只需得到y值
}否则{
y=p1[1]+(p2[1]-p1[1])*(pos.x-p1[0])/(p2[0]-p1[0]);
//这是代数位,见下文
}
在最后一个例子中,使用的等式是。数学不是很棒吗?

你的代数怎么样

实际上,弗洛特的例子中有一个例子。如果您查看该页面的源代码,您将看到以下内容(我添加了解释注释):

//按x方向查找最近的点
//循环序列数据,直到找到点为止
//在您感兴趣的x值之后(本代码中的位置x)
对于(j=0;jpos.x){
打破
}
}
//现在插入
//这就是代数的乐趣!
变量y,
p1=series.data[j-1],//x前面的点
p2=系列数据[j];//指向你的x
如果(p1==null){
y=p2[1];//如果之前没有点,只需获取y值
}else if(p2==null){
y=p1[1];//如果之后没有点,只需得到y值
}否则{
y=p1[1]+(p2[1]-p1[1])*(pos.x-p1[0])/(p2[0]-p1[0]);
//这是代数位,见下文
}

在最后一个例子中,使用的等式是。数学不是很棒吗?

如果你有两个相同的x值怎么办?是否同时显示y值?用户只能输入一个数字。图形上可能有多条线,在这种情况下,会输出多个y值。如果有两个相同的x值,该怎么办?是否同时显示y值?用户只能输入一个数字。图形上可能有多条线,在这种情况下,会输出多个y值。如果有两个相同的x值,该怎么办?是否同时显示y值?用户只能输入一个数字。图形上可能有多条线,在这种情况下,会输出多个y值。如果有两个相同的x值,该怎么办?是否同时显示y值?用户只能输入一个数字。图形上可能有多条线,在这种情况下,将输出多个y值。
// Find the nearest points, x-wise
// loop the series data until you find the point
// immediately after your x value of interest (pos.x in this code)
for (j = 0; j < series.data.length; ++j) {
    if (series.data[j][0] > pos.x) {
        break;
    }
}

// Now Interpolate
// Here's the algebra fun!
var y,
    p1 = series.data[j - 1], // point before your x
    p2 = series.data[j]; // point after your x

if (p1 == null) {
    y = p2[1]; // if no point before just get y-value
} else if (p2 == null) {
    y = p1[1]; // if no point after just get y-value
} else {
    y = p1[1] + (p2[1] - p1[1]) * (pos.x - p1[0]) / (p2[0] - p1[0]);
    // here's the algebra bit, see below    
}