当给出以下一组坐标时,这些坐标定义了从(x1,y1)到(x2,y2)
的线段1.350 1.890 3.825 3.330
3.915 1.575 2.385 3.690
1.350 2.295 4.545 1.845
2.250 1.710 4.140 3.060
2.250 3.150 3.465 1.755
你有三角形,如果你可以从 A 和 B 的线段开始,请按 B 直到它与某个线段 C 相交,然后按 C 直到它与 A 相交。
对我来说,输入的每一行对应于由两个点定义的直线似乎是显而易见的,因为如果我使用Line2D.Double将它们转换为五条2D线并将这5条线存储在ArrayList中。
我的问题实际上是找到三角形。 我最初的想法是找到一个交叉点,然后前进到相交的线,看看它是否相交,然后看第三条线是否与第一条线相交。
这是我尝试这样做的:
for (int i = 0; i < list.size() - 2; i++) {
if (list.get(i).intersectsLine(list.get(i + 1))) {
if (list.get(i+1).intersectsLine(list.get(i + 2))) {
if (list.get(i+2).intersectsLine(list.get(i))) {
count++; // Count number of triangles
}
}
}
}
然而,这给了我答案3而不是正确答案(即4)。
任何帮助都将不胜感激。
答案 0 :(得分:2)
试试这个: -
for(int n = 0;n<list.size(); i++) {
for(int m = n+1;m<list.size(); m++) { //m=n+1 : guarantee unique
for(int k = m+1;k<list.size(); k++) { //k=m+1 : guarantee unique
if (
list.get(n).intersectsLine(list.get(m)) &&
list.get(m).intersectsLine(list.get(k)) &&
list.get(n).intersectsLine(list.get(k))
) {
amountOfTriangle++;
}
}
}
}
我们的想法是找到形成三角形的唯一元组(n,m,k)
的数量
棘手的部分是不计算重复的
例如,(0,1,2)
与(0,2,1)
是相同的三角形 - 不应计算两次
因此,我添加了m=n+1
和k=m+1
来保证唯一性。
请注意,此解决方案只是草稿 如果你是一个完美主义者,你也可以: -
请告诉我它是否有效。
答案 1 :(得分:0)
我为你创建了一个示例程序。这个程序需要一些点,找到不同的点,然后使用这些点来绘制三角形。
option1