【发布时间】:2014-03-30 21:33:07
【问题描述】:
我有一个矩阵,如下所示:
0 0 1
0 0 2
0 2 1.5
表示圆的 (X, Y, R)(首先是圆心,其次是半径)
这个矩阵是动态创建的,所以它可以有你想要的所有大小,只需输入一个即可。
我需要找出这些圆圈是否相交,我这样做是这样的:
for( int i = 0; i < n; i++ ) {
dis_x = fabs(*(matrix + (i+1) * 3 + 0) - *(matrix + i * 3 + 0));
dis_y = fabs(*(matrix + (i+1) * 3 + 1) - *(matrix + i * 3 + 1));
hypotenuse = sqrt( pow(dis_x,2) + pow(dis_y,2) );
radius_i = *(matrix + i * 3 + 2);
radius_i_plus_1 = *(matrix + (i+1) * 3 + 2);
sum_of_radius = radius_i_plus_1 + radius_i;
if( sum_of_radius >= hypotenuse && hypotenuse != 0) {
*(array_of_numbers_of_circles + i * 2 + 0) = i + 1;
*(array_of_numbers_of_circles + i * 2 + 1) = i + 2;
}
}
如果我看上面的例子,我会看到: 2 3
但我需要:
1 3
2 3
换句话说,我需要将所有元素甚至第一个与最后一个(如果大小为 3)和所有元素进行比较:第二个与第四个(如果大小为 4+)
提前谢谢你!
【问题讨论】:
-
那么你需要一个嵌套循环。只需与每一对圆相交。还是太慢了?
-
你想要像
for( int i = 0; i < n; i++ ) { for( int j = i + 1; j < n; j++ ) { test if circle i and circle j intersect } }这样的东西 -
您还应该检查半径的差异是否小于中心之间的距离。如果差值大于距离,则循环嵌套。
-
@Salixalba,是的,但我需要计算 dis_x、dis_y 等等……我该怎么做? *(matrix + ?*3 + 0) - *(matrix + ?*3 + 0) 中会有什么?谢谢!
-
@KonstantinRasskazov 这是一种奇怪的做法。通常您会将
matrix定义为二维数组:int matrix[n][3]。然后就是dis_x = fabs(matrix[i][0] - matrix[j][0])等等。
标签: c++ arrays algorithm loops