lovebabymys 2016-07-31 07:40 采纳率: 0%
浏览 2677

C++中的双for循环10000*10000,运行好慢,请给个建议,缩短运行时间。for循环代码如下

int max = m.size();//max=10240
int n = 3;
int cout = 10000;
srand(time(NULL));
//开始找轮廓距离圆心的距离,再跟对应的半径比较
Point2f bj;//将轮廓中的坐标循环放到BJ中
int sum = 0;//记录满足坐标的个数
vector mb;//将满足的坐标放到mb中
float b, b1;
vector v1(3);
for (int i = 0; i < cout; i++)//count为得到的三个点的个数,也就是圆的个数,此处count设为10000
{
//vector v1(3);

            for (int i = 0; i < n; i++)//此循环为随机得到在m里面的三个点集
            {
                    int u = rand() % max;
                    v1[i] = m[u];//m为得到的轮廓的坐标集
            }
            IsPointInALine(v1[0], v1[1], v1[2]);//判断三点是否可以构成圆,是,返回true,不是,返回false
            FindCircle(v1[0], v1[1], v1[2], centre, radius);//得出三点的圆心坐标与半径
            sum = 0;
            if (!((IsPointInALine(v1[0], v1[1], v1[2]))&&(70<radius<80)&&(54<radius<60)))
                    continue;//三点是否组成圆,是,则找与该圆心距离为其半径的点

                    for (int j = 0; j < max; j++)//max为m点集的个数m.size()
                    {
                            bj = m[j];

                            b1 = (float)(sqrt((bj.x - centre.x)*(bj.x - centre.x) + (bj.y - centre.y)*(bj.y - centre.y)));
                            b = fabs(b1 - radius);
                            if (b <= 1)
                                    sum += 1;
                            float zc;
                            zc = 4/3*PI*radius;
                            if (sum>zc)
                            {

                                    mb.push_back(Point3f(centre.x, centre.y, radius));
                                    circle(image, centre, radius, Scalar(155, 50,255));
                                    break;
                            }
                    }

    }
  • 写回答

2条回答 默认 最新

  • 鱼弦 全栈领域优质创作者 2016-07-31 08:07
    关注

    可以分步骤:
    1. 首先 将所有 可以形成圆 的 坐标都 存起来,map或者哈希都可以,自己自定义 存储结构
    2. 然后判断并取得 这些 圆的半径
    3. 走 max 循环

    注: 这三步 虽然看起来 跟 你这个循环 结构 走的一样,但是分开之后走,你就会发现,节约很多

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器