我比较了三个不同的数组,在我的例子中,我的程序正在检查一个特定圆相交的其他圆圈数。我的功能是:
void Intersection(int n, int A[], int B[], int C[])
{
ofstream out(rez);
for (int i = 0; i < n; i++)
{
times_condition_met=0;
for (int j = 0; j < n; j++)
{
if (Distance(X, Y, i, j) < (Radius[i] + Radius[j]))
{
times_condition_met++;
}
}
}
}
我的三个不同阵列中的圆心和半径的坐标。
X[] Y[] and R[]
这是必须满足的条件
if (Distance(X, Y, i, j) < (Radius[i] + Radius[j]))
times_condition_met++;
函数Distance
找到两点之间的距离(在圆心之间)。
当计算一个特定圆与之相交的其他圆圈时,我遇到的问题是当我的函数检查条件是否满足时,例如如果Circle1
与Circle2
times_condition_met++
相交,则稍后循环检查Circle2
是否与Circle1
相交,它会再次times_condition_met++
。那么我应该使用哪种if
Circle1
与Circle2
相交,Circle2
与Circle1
相交会被视为条件只满足一次两个?
答案 0 :(得分:1)
我认为你的for循环需要更新。
尝试:
for (int i = 0; i < n-1; i++) // Update here
{
times_condition_met=0;
for (int j = i+1; j < n; j++) // Update here
通过这种方式,您只会比较两次特定的圈子。
在第一个循环中,圆圈0将与圆圈1,2,...,n-1
进行比较在第二个循环中,圆圈1将与圆圈2,3,...,n-1
进行比较在第三个循环中,圆圈2将与圆圈3,4,...,n-1
进行比较依旧......
在最后一个循环中,将n-2与圆圈n-1进行比较
所有在一起 - 任何一对圆圈只检查一次。
要计算哪个圆圈与大多数圆圈相交,您可以这样做:
// Make a vector with n elements - all initialized to zero
std::vector hitcounter(n, 0);
for (int i = 0; i < n-1; i++)
{
times_condition_met=0;
for (int j = i+1; j < n; j++)
{
if (Distance(X, Y, i, j) < (Radius[i] + Radius[j]))
{
times_condition_met++;
// increment hit counter
hitcounter[i] = hitcounter[i] + 1;
hitcounter[j] = hitcounter[j] + 1;
}
}
}
int top = -1;
int topIndex = -1;
for (int i = 0; i < n; i++)
{
if (hitcounter[i] > top)
{
top = hitcounter[i];
topIndex = i;
}
}
if (top == -1)
{
cout << "No intersect found" << endl;
}
else
{
cout << "Most intersect found for circle " << topIndex << " Hits=" << top << endl;
}