我正在尝试从Java中的较大点集中找到所有4个或更多共线点的集合。
我最初的方法是创建一个双精度数组,存储数组中一个点与所有其他点之间的斜率。对数组进行排序后,如果出现3个或更多重复的斜率,则表示我已经找到有效的集合。
但是,在没有非常混乱的代码的情况下,我很难找到3个或更多重复双打的集合。除了数组,我也无法使用数据结构。有人对我该如何做有什么建议吗?
Point[] points = getPoints();
for (int p = 0; p < points.length; points++)
{
Double[] slopes = getSlopes(points, p);
mergeSort(slopes);
double currentSlope = slopes[0];
int numDup = 1;
for (int i = 1; i < slopes.length; i++)
if (currentSlope != slopes[i]);
{
if (numDup >= 3)
// store value of currentSlope somewhere...
currentSlope = slopes[i];
numDup = 1;
}
else
numDup++;
}