我想根据两条线的交点生成两个虚拟点。如果线与画布区域相交,则无法计算。这两个虚拟点可以预测为在0 或 max-Y 处具有 ay 位置并与每条线相交。
细节 :
好吧,我的程序有问题。为了从一组一个点和两条线生成一个正确的点,我必须找出我拥有的两条线是否相互交叉。
Java.Line2D.intersectsLine() API可以简单地找到这种情况,但我真正的问题是,有时一条线会在画布边界之外相交(x<0, y<0, x>maxX, y>maxY)。我拥有的线被认为是无限的,但是技术问题限制我在 y=0 和 y=maxY 处画线。为了解决这个问题,我从两条线上生成了一个两个虚拟点来替代该点。
http://i.stack.imgur.com/23aSD.jpg
正如你所看到的,在第一张图片中,我可以很容易地得到 F 作为我任务的答案。但是,当交点超出画布/面板边界时,我必须生成两个虚拟点作为替换。
我可以得到两组点,即 B&E 或 C&D,正确答案当然是 B&E,但我不知道如何获得正确的算法来解决这个问题。起初,我试图创建一条从 A 到每条线中每个相应点的线,并获得最大的一个角度,如您在图片 2 中看到的那样作为答案,我设法找到正确的答案是最大的角度。但是在所有可能的随机条件下,无法预测两条线的定位,不知何故我在这种情况下绊倒了。
出现了一个新情况:http: //i.stack.imgur.com/tGZy1.jpg
在这种情况下,最大的两个角属于 B 和 D,因此破坏了取正确点的假设。所以为了纠正这个问题,我目前正在为这个问题集思广益。但是,如果你们中的任何人可以给我一些启发,那将不胜感激。即使是数学概念也很棒,所以也许你们中的任何人有任何想法?
顺便说一句,该点将在两条线内,我在我的算法中一一检查该线。
任何帮助表示赞赏。
for (int i = 0;i<lineContainer.size()-1;i++){
for (int j = i+1;j<lineContainer.size();j++){
if lineContainer.get(i).intersectsLine(lineContainer.get(j)){
point = getIntersectionPoint(lineContainer.get(i), lineContainer.get(j));
answer.add(point);
}else{
// Based on assumption that line that not paralel will somewhere intersects
Point[] p = new Point[2];
p[0] = lineContainer.get(i).getP1();
p[1] = lineContainer.get(i).getP2();
Line l = new Line(queryPoint, p[0]);
double[] d = new double[2];
d[0] = checkAngle(l, lineContainer.get(i));
l = new Line(queryPoint, p[1]);
d[1] = checkAngle(l, lineContiner.get(i));
if(d[0]>d[1]){
answer.add(p[0]);
}else{
answer.add(p[1]);
}
}
}
}