虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > C/C++编程 > c语言同名标靶点自动匹配算法实现实例代码

c语言同名标靶点自动匹配算法实现实例代码
类别:C/C++编程   作者:码皇   来源:互联网   点击:

这篇文章主要介绍了c语言同名标靶点自动匹配算法实现实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

1.两个标靶数据

2.匹配结果

3.代码

    #include <iostream>#include <vector>#include <math.h>using namespace std;
    struct Point{
    int id;
    float x,y,z;
    Point(int _id,float _x,float _y,float _z):id(_id),x(_x),y(_y),z(_z){
    }
    }
    ;
    struct Triangle{
    Point p1,p2,p3;
    }
    ;
    class PointCloud{
    public: bool readFile(char *filename);
    //void PointMatch(const PointCloud& pc1,const PointCloud &pc2);
    vector<Point> pData;
    int r,g,b;
    }
    ;
    bool PointCloud::readFile(char *filename){
    if(filename==NULL)return false;
    FILE *fp=fopen(filename,"r");
    if (!fp) {
    printf("Load file %s failedn", filename);
    return false;
    }
    char buffer[100];
    int count=0;
    while(!feof(fp)) {
    fgets(buffer, 300, fp);
    float x,y,z;
    sscanf_s(buffer,"%f%f%f",&x,&y,&z);
    Point p(count++,x,y,z);
    pData.push_back(p);
    }
    pData.pop_back();
    }
    float calDis(const Point &p1,const Point &p2){
    return sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y)+(p2.z-p1.z)*(p2.z-p1.z));
    }
    void PointMatch(const PointCloud& pc1,const PointCloud &pc2){
    for (int i=0;
    i<pc1.pData.size()-2;
    ++i) for(int j=i+1;
    j<pc1.pData.size()-1;
    ++j) for (int k=j+1;
    k<pc1.pData.size();
    ++k) {
    Point p1=pc1.pData[i];
    Point p2=pc1.pData[j];
    Point p3=pc1.pData[k];
    float s12=calDis(p1,p2);
    float s13=calDis(p1,p3);
    float s23=calDis(p2,p3);
    for (int m=0;
    m<pc2.pData.size();
    ++m) for (int n=0;
    n<pc2.pData.size();
    ++n) for (int l=0;
    l<pc2.pData.size();
    ++l) {
    if (n!=m&&m!=l&&n!=l) {
    Point _p1=pc2.pData[m];
    Point _p2=pc2.pData[n];
    Point _p3=pc2.pData[l];
    float _s12=calDis(_p1,_p2);
    float _s13=calDis(_p1,_p3);
    float _s23=calDis(_p2,_p3);
    if (fabs(s12-_s12)<0.45&&fabs(s13-_s13)<0.45&&fabs(s23-_s23)<0.45) {
    cout<<"pc1....."<<p1.id<<"pc2......"<<_p1.id<<endl;
    cout<<"pc1....."<<p2.id<<"pc2......"<<_p2.id<<endl;
    cout<<"pc1....."<<p3.id<<"pc2......"<<_p3.id<<endl;
    }
    }
    }
    }
    }
    int main(){
    char *file1="测试点云\点云Mark0.txt";
    char *file2="测试点云\点云Mark1.txt";
    PointCloud pc1,pc2;
    pc1.readFile(file1);
    pc2.readFile(file2);
    PointMatch(pc1,pc2);
    }

总结

以上就是本文关于c语言同名标靶点自动匹配算法实现实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

您可能感兴趣的文章:

  • C语言基本排序算法之桶式排序实例
  • C语言基本排序算法之shell排序实例
  • C语言排序算法之冒泡排序实现方法【改进版】
  • C语言基本排序算法之插入排序与直接选择排序实现方法
  • C语言实现文件内容按行随机排列的算法示例
  • C语言实现运筹学中的马氏决策算法实例
相关热词搜索: c语言算法实例 c语言 自动匹配算法 c语言字