绘图算法

时间:2017-10-28 18:13:45

标签: c++ algorithm math

我一直在研究这个问题而且我在解决它时遇到了麻烦。不知道从哪里开始,有人可以帮助我吗?

int below(Plot p, line l);
int above(Plot p, line l);
line findLine(Plot p, line l)
{
}

program

1 个答案:

答案 0 :(得分:1)

它是标准的二进制搜索问题。

  • 现在想想你需要找到什么?

将{2}相等的部分(基于点数)划分的行y = k

  • y可以采用的值范围是多少?

显然-1+1

  • 您能否计算一条线是否满足问题所需的属性?

是的,你可以。只需检查Plot p的每个点,然后检查有多少个点y坐标大于k。如你知道总点数那么你会知道线的两边的点是否相等。

方法

假设您选择了一行y=k。现在,在这一点上,你会看到上面有比它下面更多的点。现在你将向上移动。如果有更多的下行,那么你将向下移动。

double good = -1.0,bad= 1+EPSILON;
for(int iter=0;iter<=100;iter++)
{
    mid = (good+bad)/2.0;
    if(check(P,mid)) // if equally divides it then it's done
       // mid is one answer;
    else if( below(p,mid)<above(p,mid))
       good=mid;
    else 
       bad=mid;
}