数据:
圆心1坐标
圆心2坐标
法线坐标
“圆心和向量.txt”文件内容,第三行是法线,一二行是圆心坐标:
-7.9145 -10.7820 92.7974
-7.8397 -10.9955 92.7522
-0.9994 0.0215 0.0261
程序exe发布流程:
1、将vs工具路径加入到环境变量下。我的是D:Program Files (x86)Microsoft Visual Studio 14.0VCbin
2、命令行进入到exe目录下:dumpbin /dependents ****.exe ,动态库的调用情况就出来了,找到这些动态库和exe一起扔到一个文件夹,完事
#include <Eigen/Dense>
#include <iostream>
#include <fstream>
#include <string>
#include <math.h>#include <pcl/point_cloud.h>
#include <pcl/point_types.h>using namespace std;//读取圆心和向量
void readCirclecenterAndVector(string strPath, pcl::PointXYZ &circle1, pcl::PointXYZ &circle2, pcl::PointXYZ &vector )
{ifstream myfile(strPath.c_str(), std::ifstream::in);if (!myfile.is_open()){cout << "can not open this file " << strPath << endl;return;}myfile >> circle1.x;myfile >> circle1.y;myfile >> circle1.z;myfile >> circle2.x;myfile >> circle2.y;myfile >> circle2.z;myfile >> vector.x;myfile >> vector.y;myfile >> vector.z;myfile.close();
}float Distance(pcl::PointXYZ circle1, pcl::PointXYZ circle2)
{float sqr = sqrt( pow(circle1.x - circle2.x, 2) + pow(circle1.y - circle2.y, 2) + pow(circle1.z - circle2.z, 2) );return abs(sqr);
}int main()
{pcl::PointXYZ circle1, circle2, vector;readCirclecenterAndVector("圆心和向量.txt", circle1, circle2, vector);cout << "圆心1:" << circle1 << endl;cout << "圆心2:" << circle2 << endl;cout << "法向量:" << vector << endl;float dis = Distance(circle1, circle2);cout << "两个圆心的距离: " << endl << dis << endl << endl;pcl::PointXYZ pp1;pcl::PointXYZ pp2;pcl::PointXYZ p;pcl::PointXYZ n;pcl::PointXYZ A;A.x = n.x = vector.x;A.y = n.y = vector.y;A.z = n.z = vector.z;p.x = circle1.x;p.y = circle1.y;p.z = circle1.z;pp1.x = (n.x*n.y*A.y + n.y*n.y*p.x - n.x*n.y*p.y + n.x*n.z*A.z + n.z*n.z*p.x - n.x*n.z*p.z + n.x*n.x*A.x) / (n.x*n.x + n.y*n.y + n.z*n.z);pp1.y = (n.y*n.z*A.z + n.z*n.z*p.y - n.y*n.z*p.z + n.y*n.x*A.x + n.x*n.x*p.y - n.x*n.y*p.x + n.y*n.y*A.y) / (n.x*n.x + n.y*n.y + n.z*n.z);pp1.z = (n.x*A.x*n.z + n.x*n.x*p.z - n.x*p.x*n.z + n.y*A.y*n.z + n.y*n.y*p.z - n.y*p.y*n.z + n.z*n.z*A.z) / (n.x*n.x + n.y*n.y + n.z*n.z);cout << "圆心1投影:" << endl;cout << "x:" << pp1.x << endl;cout << "Y:" << pp1.y << endl;cout << "Z:" << pp1.z << endl << endl;p.x = circle2.x;p.y = circle2.y;p.z = circle2.z;pp2.x = (n.x*n.y*A.y + n.y*n.y*p.x - n.x*n.y*p.y + n.x*n.z*A.z + n.z*n.z*p.x -n.x*n.z*p.z + n.x*n.x*A.x) / (n.x*n.x + n.y*n.y + n.z*n.z);pp2.y = (n.y*n.z*A.z + n.z*n.z*p.y - n.y*n.z*p.z + n.y*n.x*A.x + n.x*n.x*p.y -n.x*n.y*p.x + n.y*n.y*A.y) / (n.x*n.x + n.y*n.y + n.z*n.z);pp2.z = (n.x*A.x*n.z + n.x*n.x*p.z - n.x*p.x*n.z + n.y*A.y*n.z + n.y*n.y*p.z -n.y*p.y*n.z + n.z*n.z*A.z) / (n.x*n.x + n.y*n.y + n.z*n.z);cout << "圆心2投影:" << endl;cout << "x2:" << pp2.x << endl;cout << "Y2:" << pp2.y << endl;cout << "Z2:" << pp2.z << endl << endl;cout << "两个圆心投影点 xyz的差值:" <<endl;cout << "x2-x1:" << pp2.x -pp1.x << endl;cout << "y2-y1:" << pp2.y -pp1.y<< endl;cout << "z2-z1:" << pp2.z-pp1.z << endl << endl;float dis2 = Distance(pp1, pp2);cout << "两个圆心投影点的距离: " << endl << dis2 << endl;getchar();return true;}
本文发布于:2024-01-29 15:29:43,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170651338816255.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |