Java 基于超出画布限制的两条线的交点生成点
我想根据两条线的交点生成两个虚拟点。如果线在画布区域之外相交,因此无法计算。可以预测两个虚拟点的y位置为0或最大y,并与每条线相交。Java 基于超出画布限制的两条线的交点生成点,java,math,geometry,Java,Math,Geometry,我想根据两条线的交点生成两个虚拟点。如果线在画布区域之外相交,因此无法计算。可以预测两个虚拟点的y位置为0或最大y,并与每条线相交。 详情: 嗯,我的程序有问题。为了从一个点和两条线的集合中生成一个正确的点,我必须找出我拥有的两条线是否相交 Java.Line2D.intersectsLine()API可以简单地找到这种情况,但我真正的问题是有时一条线会在画布边界之外相交(xmaxY)。我拥有的线被认为是无限的,但是技术问题限制我在y=0和y=maxY处画线。为了解决这个问题,我从两条直线生成
详情: 嗯,我的程序有问题。为了从一个点和两条线的集合中生成一个正确的点,我必须找出我拥有的两条线是否相交 Java.Line2D.intersectsLine()API可以简单地找到这种情况,但我真正的问题是有时一条线会在画布边界之外相交(xmaxY)。我拥有的线被认为是无限的,但是技术问题限制我在y=0和y=maxY处画线。为了解决这个问题,我从两条直线生成了一个两个虚拟点,以替换该点 如你所见,在第一幅图中,我可以很容易地得到F作为我任务的答案。但是,当交点超出画布/面板边界时,我必须生成两个虚拟点作为替换 我可以得到两个点,即B&E或C&D,正确的答案当然是B&E,但我不知道如何得到正确的算法来解决这个问题。首先,我试着从a到每一条线中的每一个点画一条线,并得到最大的一个角度,正如你在第二张图片中看到的,作为答案,我设法发现正确的答案是最大角度的答案。但是在任何可能的随机条件下,双线定位都无法预测,不知何故,我在这种条件下绊倒了 出现了一种新情况: 在这种情况下,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]);
}
}
}
}
for(inti=0;i今早解决它,细节如图所示
如图所示,您可以通过从每个点创建一个区域来生成替换点,并计算该区域的内角。正确的组合将创建最大的角度总和。该角度总和将始终大于180度,因为该区域内的所有角度总和将始终为360度。编辑您的问题,包含较少的文本,并包含一些代码来演示您到目前为止所做的工作和您需要的内容,您的问题将获得更多的视图、注释和答案您可以缩小比例以适应该视图中的观点?或者您可以剪裁视图的较小部分,并使用另一个预览视图来显示交叉点什么是c正确的解决方案,不是CD?已编辑,但不知道如何格式化代码,这不是一个实时代码,只是一个例子。@Joni,因为交点在y<0,但是我无法知道线是否会在ymax y中相交。嘿,这可能是个主意,如果我知道每条线的梯度,也许我可以预测交点。