这个程序思路是什么啊

zxczxy1990 2018-04-21 11:49:08
...全文
714 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxczxy1990 2018-05-08
  • 打赏
  • 举报
回复
您好 方便留一下您联系方式吗 我请教您一下 多谢啦
worldy 2018-04-23
  • 打赏
  • 举报
回复
1,循环不需要都从0开始,不同点才需要计算距离 for (int m = 0; m < points1.size(); m++){ for (int i = m+1 ; i < points1.size(); i++) 2、应该不需要保存距离值 if(d1-d2>delta) return false;//d1,d2分别 为S、T集合的i、j点之间的距离差值,发现有距离不匹配就返回,不需要继续往下计算
worldy 2018-04-22
  • 打赏
  • 举报
回复
分别计算S和T里任意两点的距离,并判断是否相等(误差小于delta)
zxczxy1990 2018-04-22
  • 打赏
  • 举报
回复
#include <opencv2\opencv.hpp> #include <cmath> #include <cv.h> #include <fstream> #include <iostream> #include <vector> //#include "Windef.h" #include "opencv2/calib3d/calib3d.hpp" #include <algorithm> //#include "opencv2/imgcodecs.hpp" using namespace std; using namespace cv; //bool cmp(int *p, int *q) //{ // if (p[0] == q[0]) // { // if (p[1] == q[1]) // { // return p[2]<q[2]; // } // else return p[1]<q[1]; // } // else return p[0]<q[0]; //} int findMax(vector<double> vec) { int max = -999; for (auto v : vec) { if (max < v) max = v; } return max; } int main(){ // 导入三维数据 vector<cv::Point2d> points1, points2; ifstream infile("pl.txt"); if (!infile) { cout << "LinePoint-L6.txt! " << endl; return 0; } double x, y; while (infile >> x >> y) { points1.push_back(cv::Point2d(x, y)); } ifstream infile1("pr.txt"); if (!infile1) { cout << "LinePoint-R6.txt! " << endl; return 0; } double x1, y1; while (infile1 >> x1 >> y1) { points2.push_back(cv::Point2d(x1, y1)); } //3D匹配 vector<double> dis_3dv; //points11中点的距离 vector<double> dis1_3dv;//points21中点的距离 double **dis_3d = new double*[13]; double **dis1_3d = new double*[13]; //double dis_3d[13][13]; //double dis1_3d[13][13]; for (int i = 0; i < points1.size(); i++) { double a = points1[i].x; double b = points1[i].y; //double c = points11[i].z; double a1 = points2[i].x; double b1 = points2[i].y; //double c1 = points21[i].z; dis_3d[i] = new double[13]; dis1_3d[i] = new double[13]; for (int j = 0; j < points2.size() && j != i; j++) { //点的坐标 double x = points1[j].x; double y = points1[j].y; //double z = points11[j].z; double x1 = points2[j].x; double y1 = points2[j].y; //double z1 = points21[j].z; //计算点到点的距离 //dis_3d.push_back(sqrt((a - x)*(a - x) + (b - y)*(b - y))); //dis1_3d.push_back(sqrt((a1 - x1)*(a1 - x1) + (b1 - y1)*(b1 - y1) )); dis_3d[i][j] = sqrt((a - x)*(a - x) + (b - y)*(b - y)); dis1_3d[i][j] = sqrt((a1 - x1)*(a1 - x1) + (b1 - y1)*(b1 - y1)); //dis1_3d[i][j] = sqrt((a1 - x1)*(a1 - x1) + (b1 - y1)*(b1 - y1)); //cout << dis_3d[2][12] << endl << dis_3d[2][12] << endl; //dis_3d.push_back(sqrt((a-x)*(a-x) + (b-y)*(b-y)+(c-z)*(c-z))); sort(dis_3d, dis_3d + 13); sort(dis1_3d, dis1_3d + 13); cout << dis_3d[i][j] <<endl; } } //cout << aa[0][0]<< endl; //vector转数组 vector<int> Match; //存储匹配 //double dis[15][15]; for (int m = 0; m < points1.size(); m++){ for (int i = 0; i < points1.size(); i++){ vector<double> dis;//存储两个不同的点集之间距离的差值 for (int j = 0; j < points2.size(); j++){ //计算点集之间距离的差值 //sort(dis_3d[i][j], dis_3d[i][j] + 15); dis.push_back(fabs(dis_3d[m][j] - dis1_3d[i][j])); //cout << dis[m]; } //匹配点的存储 double maxNumber = findMax(dis); cout << maxNumber << endl; double threshold = -22; if (maxNumber < threshold) { //求出此时对应的最小距离所在位置 Match.push_back(i); } } //Match1.push_back(Point(m, Match[i])); } cout << Match[7] << endl; system("pause"); } 请问我的程序思路哪里不对吗
赵4老师 2018-04-21
  • 打赏
  • 举报
回复
百度搜相关关键字。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧