JFreeChartで2つのシリーズの交差点を見つけることは可能ですか?交差しているチャートシリーズに共通点はありません。したがって、交点は、グラフ上で互いに交差する2つの系列について計算される必要があります。交差点のポイント
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));
}
}
}
:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException:
org.jfree.data.xy.XYDataItem cannot be cast to
org.apache.commons.math3.geometry.euclidean.twod.Line
Trashgodの提案後、私は次のことをやって試してみました:
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));
}
}
}
上記のコードは、私がやろうとしたが、これは、このメッセージをClassCastException
をスローするものです
しかし、このリストをたどっている間は、交差点がほんのわずかであっても、(下の図に示すように)多くの結果が得られます。
交点も正しくありません。
そして、私のチャートは次のようになります。 Image for Jfreechart
これに問題があることを示唆してください。
@trashgodの返信ありがとうございます。しかし、私が持っているデータセットには、同じアイテムがありません。私はそれらの間に共通のデータポイントを持たない2つのXYLineChartシリーズの交差点を見つける必要があります。だから、私はequalsメソッドを使うことができないだろうと思う。 – Yoo
私は上記で詳しく述べました。この要件を明確にするために質問を更新してください。 – trashgod
ありがとうございます。あなたは、 "各リストには、対応するシリーズの連続する点を結ぶ線が含まれているはずです"と述べました。それが意味することをちょっと詳しく教えてください。どんな助けも素晴らしいだろう。 – Yoo