Algorithm 为什么要比较以下解决方案的直线斜率?

Algorithm 为什么要比较以下解决方案的直线斜率?,algorithm,computational-geometry,Algorithm,Computational Geometry,下面是一个解决方案 for(int-iStar1=0;iStar1最佳和) { 最佳总和=sum2; } } } 为什么由现有点形成的直线斜率与分离线比较?< P>如果你考虑按最佳分离线,你将总是能够推动它直到它达到一个点,然后旋转它直到它达到另一个点。 P>这个调整后的线的分数将与原来的分数相同,所以你只需要考虑经过两个原始点的调整后的直线。 这样做的原因是因为这大大减少了可能需要考虑的分隔线的数量 for (int iStar1 = 0; iStar1 < n; iStar1++)

下面是一个解决方案

for(int-iStar1=0;iStar1totalV-sum1)
{
sum1=总V-sum1;
}
如果(sum2>totalV-sum2)
{
sum2=总V-sum2;
}
如果(sum1>最佳和)
{
最佳和=sum1;
}
如果(sum2>最佳和)
{
最佳总和=sum2;
}
}
}

为什么由现有点形成的直线斜率与分离线比较?

< P>如果你考虑按最佳分离线,你将总是能够推动它直到它达到一个点,然后旋转它直到它达到另一个点。

<> P>这个调整后的线的分数将与原来的分数相同,所以你只需要考虑经过两个原始点的调整后的直线。 这样做的原因是因为这大大减少了可能需要考虑的分隔线的数量

for (int iStar1 = 0; iStar1 < n; iStar1++)
{
    for (int iStar2 = iStar1 + 1; iStar2 < n; iStar2++)
    {
        int sum1 = 0;
        for (int iStar3 = 0; iStar3 < n; iStar3++)
        {
            long line1 = (long)(stars[iStar3].y - stars[iStar1].y) * (stars[iStar2].x - stars[iStar1].x);
            long line2 = (long)(stars[iStar3].x - stars[iStar1].x) * (stars[iStar2].y - stars[iStar1].y);
            if ((iStar3 != iStar1) && (iStar3 != iStar2) && (line1 < line2))
            {
                sum1 += stars[iStar3].v;
            }
        }
        int sum2 = sum1 + stars[iStar1].v + stars[iStar2].v;

        if (sum1 > totalV - sum1)
        {
            sum1 = totalV - sum1;
        }
        if (sum2 > totalV - sum2)
        {
            sum2 = totalV - sum2;
        }

        if (sum1 > bestSum)
        {
            bestSum = sum1;
        }
        if (sum2 > bestSum)
        {
            bestSum = sum2;
        }
    }
}