Java 级数交点

Java 级数交点,java,jfreechart,Java,Jfreechart,有可能在JFreeChart中找到两个系列的交点吗?相交的图表系列之间没有任何共同点。因此,需要计算两个序列的交点,这两个序列恰好在图上相交 List<Line> lineOne = one.getItems(); List<Line> lineTwo = two.getItems(); for (Line i : lineOne) { for (Line j : lineTwo) { if (i.intersection(j) != nu

有可能在JFreeChart中找到两个系列的交点吗?相交的图表系列之间没有任何共同点。因此,需要计算两个序列的交点,这两个序列恰好在图上相交

List<Line> lineOne = one.getItems(); 
List<Line> lineTwo = two.getItems(); 
for (Line i : lineOne) { 
    for (Line j : lineTwo) { 
        if (i.intersection(j) != null) { 
            System.out.println(i.intersection(j)); 
        } 
    } 
}
在垃圾神的建议下,我尝试了以下几点:

List<XYDataItem> l1 = one.getItems();
List<XYDataItem> l2 = two.getItems();

Line itemOne = null;
Line itemTwo = null;
List<Line> lineOne = new ArrayList<Line>();
List<Line> lineTwo = new ArrayList<Line>();

//Add lines to the first list
for(int i = 0; i < l1.size(); i++){
    if(i < l1.size()-1) {
        itemOne = new Line(new Vector2D(l1.get(i).getXValue(),
                        l1.get(i).getYValue()), 
                        new Vector2D(l1.get(i+1).getXValue(), 
                        l1.get(i+1).getYValue()), 0);
        lineOne.add(itemOne);
    }
}

//Add lines to the second list
for(int i = 0; i < l2.size(); i++){
    if(i < l2.size()-1) {
        itemTwo = new Line(new Vector2D(l2.get(i).getXValue(),
                        l2.get(i).getYValue()), 
                        new Vector2D(l2.get(i+1).getXValue(), 
                        l2.get(i+1).getYValue()), 0);
        lineTwo.add(itemTwo);
    }
}

for(Line i: lineOne) {
    for(Line j: lineTwo) {
        if (i.intersection(j) != null) { 
            System.out.println(i.intersection(j)); 
        }                       
    }
}
List l1=one.getItems();
List l2=two.getItems();
行itemOne=null;
行itemTwo=null;
List lineOne=新的ArrayList();
List lineTwo=new ArrayList();
//在第一个列表中添加行
对于(int i=0;i
但是,在遍历此列表时,即使只有很少的交点,也会产生很多结果(如下图所示)。
交点也不正确

我的图表如下所示:


请对此问题提出建议。

是的,您可以在组成的项目中进行迭代。作为一个具体的例子,内部有一个
XYDataItem
列表。因为
XYDataItem
实现了
compariable
,所以可以使用
equals()
测试交叉点。给定两个系列包含一个共同项目

private final XYSeries one = new XYSeries("One");
private final XYSeries two = new XYSeries("Two");
…
one.add(1, 1);
one.add(1, 42);
two.add(1, 2);
two.add(1, 42);
以下迭代方案找到了共同点,
[1.0,42.0]

List<XYDataItem> list1 = one.getItems();
List<XYDataItem> list2 = two.getItems();
for (XYDataItem i : list1) {
    for (XYDataItem j : list2) {
        if (i.equals(j)) {
            System.out.println(i);
        }
    }
}
我需要找到两个
XYLineChart
系列的交点,它们之间没有公共数据点

您可以在
列表的两个实例上使用相同的迭代方案;每个列表应包含连接相应系列连续点的线。将
equals()
替换为概念上的
intersects()
方法。你可以使用;是一个典型的实现

上面的代码…抛出一个带有消息的
ClassCastException

线程“AWT-EventQueue-0”java.lang.ClassCastException中的异常: 无法将org.jfree.data.xy.XYDataItem强制转换为 org.apache.commons.math3.geometry.euclidean.twod.Line

这是意料之中的;您必须遍历每个
列表
,以创建相应的
列表
。第一条
线
将以点1和点2为边界;第二行是第2点和第3点,等等。

谢谢@trashgood的回复。但是,我拥有的数据集中没有相同的项。我需要找到两个XYLineChart系列的交点,它们之间没有公共数据点。所以我想我不能使用equals方法;请更新您的问题以澄清此要求。谢谢。您说过“每个列表应该包含连接相应系列的连续点的线”。你能详细说明一下这是什么意思吗?任何帮助都很好。第1行由点1和点2限定;第2行以第2点和第3点等为界。注释中的代码为难读代码;请编辑您的问题以包含一个;我在上面提出了一个替代方案。
list1.stream().forEach((i) -> {
    list2.stream().filter((j) -> (i.equals(j))).forEach((item) -> {
        System.out.println(i);
    });
});