当前位置: 首页 > news >正文

云南省住房建设厅网站西安网站制作顶尖公司

云南省住房建设厅网站,西安网站制作顶尖公司,山东工艺美术学院网站建设公司,广告制作费开发环境#xff1a; Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码目的#xff1a;学习与总结 demo解决问题#xff1a;基于标记点#xff0c;两个点集在配准后的平均距离最小#xff0c;要求输入两个点数必须相等 Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码目的学习与总结 demo解决问题基于标记点两个点集在配准后的平均距离最小要求输入两个点数必须相等序号一致的点集做线性变换。 关键类vtkTransform、vtkTransformFilter、vtkLandmarkTransform 知识点 1. vtkMath::Add此处仅用于创建两个点集合target、sourse。参考链接 2. ShallowCopyvtk的浅拷贝共享对象。参考链接 3. transform相关的文章两篇重点且未消化参考链接1、参考链接2 4. vtkLandmarkTransform用于粗批准初步对齐 1). AlignFrames(frame2, frame1, transform);//把frame2向frame1靠拢 landmarkTransform-SetSourceLandmarks(sourcePoints);landmarkTransform-SetTargetLandmarks(targetPoints)landmarkTransform-SetModeToRigidBody();landmarkTransform-Update(); 2) 获取变换矩阵后传出给外面的frame2使用 vtkMatrix4x4* M landmarkTransform-GetMatrix();transform-SetMatrix(M);3)通过显示结果或者输出文件观察线形变换后的位姿 void ApplyTransform(vtkTransform* transform, std::string filename){vtkNewvtkPolyData polydata;CreatePolydata(polydata);vtkNewvtkTransformFilter transformFilter;transformFilter-SetInputData(polydata);transformFilter-SetTransform(transform);transformFilter-Update();vtkNewvtkXMLPolyDataWriter writer;writer-SetFileName(filename.c_str());writer-SetInputConnection(transformFilter-GetOutputPort());writer-Write();}#include vtkLandmarkTransform.h #include vtkMath.h #include vtkNew.h #include vtkPoints.h #include vtkPolyData.h #include vtkTransform.h #include vtkTransformFilter.h #include vtkVertexGlyphFilter.h #include vtkXMLPolyDataWriter.hnamespace { struct Frame {Frame(float o[3], float x[3], float y[3], float z[3]){this-SetOrigin(o);this-SetXDirection(x);this-SetYDirection(y);this-SetZDirection(z);std::cout Origin: this-origin[0] this-origin[1] this-origin[2] std::endl;std::cout xDirection: this-xDirection[0] this-xDirection[1] this-xDirection[2] std::endl;std::cout yDirection: this-yDirection[0] this-yDirection[1] this-yDirection[2] std::endl;std::cout zDirection: this-zDirection[0] this-zDirection[1] this-zDirection[2] std::endl;}void ApplyTransform(vtkTransform* transform, std::string filename){vtkNewvtkPolyData polydata;CreatePolydata(polydata);vtkNewvtkTransformFilter transformFilter;transformFilter-SetInputData(polydata);transformFilter-SetTransform(transform);transformFilter-Update();vtkNewvtkXMLPolyDataWriter writer;writer-SetFileName(filename.c_str());writer-SetInputConnection(transformFilter-GetOutputPort());writer-Write();}void CreatePolydata(vtkPolyData* polydata){/** https://blog.csdn.net/liushao1031177/article/details/120809118static void Add(const float a[3], const float b[3], float c[3]){for (int i 0; i 3; i){c[i] a[i] b[i];}}*/vtkNewvtkPoints points;points-InsertNextPoint(this-origin);float x[3];vtkMath::Add(this-origin, this-xDirection, x);points-InsertNextPoint(x);float y[3];vtkMath::Add(this-origin, this-yDirection, y);points-InsertNextPoint(y);float z[3];vtkMath::Add(this-origin, this-zDirection, z);points-InsertNextPoint(z);polydata-SetPoints(points);vtkNewvtkVertexGlyphFilter vertexGlyphFilter;//单独的点是看不到的需要转换成符号vertexGlyphFilter-AddInputData(polydata);vertexGlyphFilter-Update();//https://zhuanlan.zhihu.com/p/138080564polydata-ShallowCopy(vertexGlyphFilter-GetOutput());}void Write(std::string filename){vtkNewvtkPolyData polydata;CreatePolydata(polydata);vtkNewvtkXMLPolyDataWriter writer;writer-SetFileName(filename.c_str());writer-SetInputData(polydata);writer-Write();}float origin[3];float xDirection[3];float yDirection[3];float zDirection[3];void SetOrigin(float o[3]){this-origin[0] o[0];this-origin[1] o[1];this-origin[2] o[2];}void SetXDirection(float direction[3]){vtkMath::Normalize(direction);this-xDirection[0] direction[0];this-xDirection[1] direction[1];this-xDirection[2] direction[2];}void SetYDirection(float direction[3]){vtkMath::Normalize(direction);this-yDirection[0] direction[0];this-yDirection[1] direction[1];this-yDirection[2] direction[2];}void SetZDirection(float direction[3]){vtkMath::Normalize(direction);this-zDirection[0] direction[0];this-zDirection[1] direction[1];this-zDirection[2] direction[2];} };void AlignFrames(Frame sourceFrame, Frame destinationFrame,vtkTransform* transform); } // namespaceint main(int, char*[]) {float frame1origin[3] {0, 0, 0};float frame1XDirection[3] {1, 0, 0};float frame1YDirection[3] {0, 1, 0};std::cout frame1YDirection[0] frame1YDirection[1] frame1YDirection[2] std::endl;float frame1ZDirection[3] {0, 0, 1};Frame frame1(frame1origin, frame1XDirection, frame1YDirection,frame1ZDirection);frame1.Write(frame1.vtp);float frame2origin[3] {0, 0, 0};float frame2XDirection[3] {.707f, .707f, 0};float frame2YDirection[3] {-.707f, .707f, 0};float frame2ZDirection[3] {0, 0, 1};Frame frame2(frame2origin, frame2XDirection, frame2YDirection,frame2ZDirection);frame2.Write(frame2.vtp);vtkNewvtkTransform transform;AlignFrames(frame2, frame1, transform); // Brings frame2 to frame1// std::cout *transform std::endl;frame2.ApplyTransform(transform, transformed.vtp);return EXIT_SUCCESS; }namespace { void AlignFrames(Frame sourceFrame, Frame targetFrame, vtkTransform* transform) {// This function takes two frames and finds the matrix M between them.vtkNewvtkLandmarkTransform landmarkTransform;// Setup source pointsvtkNewvtkPoints sourcePoints;sourcePoints-InsertNextPoint(sourceFrame.origin);float sourceX[3];vtkMath::Add(sourceFrame.origin, sourceFrame.xDirection, sourceX);sourcePoints-InsertNextPoint(sourceX);float sourceY[3];vtkMath::Add(sourceFrame.origin, sourceFrame.yDirection, sourceY);sourcePoints-InsertNextPoint(sourceY);float sourceZ[3];vtkMath::Add(sourceFrame.origin, sourceFrame.zDirection, sourceZ);sourcePoints-InsertNextPoint(sourceZ);// Setup target pointsvtkNewvtkPoints targetPoints;targetPoints-InsertNextPoint(targetFrame.origin);float targetX[3];vtkMath::Add(targetFrame.origin, targetFrame.xDirection, targetX);targetPoints-InsertNextPoint(targetX);float targetY[3];vtkMath::Add(targetFrame.origin, targetFrame.yDirection, targetY);targetPoints-InsertNextPoint(targetY);float targetZ[3];vtkMath::Add(targetFrame.origin, targetFrame.zDirection, targetZ);targetPoints-InsertNextPoint(targetZ);landmarkTransform-SetSourceLandmarks(sourcePoints);landmarkTransform-SetTargetLandmarks(targetPoints);landmarkTransform-SetModeToRigidBody();landmarkTransform-Update();vtkMatrix4x4* M landmarkTransform-GetMatrix();transform-SetMatrix(M); } } // namespace
http://www.sadfv.cn/news/28895/

相关文章:

  • 网站建设专业简介dede我的网站
  • 东莞网站建设新闻资讯自己建的网站也要注册域名吗
  • 网站开发需求问卷h5网站显示的图标怎么做
  • 查询个人房产信息网站做柜子喜欢上哪些网站看
  • vue做响应式网站建设知道购物网站
  • wap网站生成微信小程序广东响应式网站建设平台
  • 如何建设一个读书的网站内网门户网站建设方案
  • 一个网站域名多少钱有名的网站建设
  • dw怎样去除网站做的页面模板域名注册后怎么使用
  • 闲鱼钓鱼网站怎么制作wordpress安装 后
  • 济南网站建设行知kejiwordpress选择windows还是
  • 做网站的需要注册商标吗海外网站备案
  • 机关网站建设存在的问题东莞手机网页制作
  • 软文推广媒体西安网站优化推广公司
  • 做暧视频网站衡水网站seo
  • 关于华大18年专注seo服务网站制作应用开发青岛网站平台开发
  • 网站的运营与管理4000套微信小游戏源码
  • 平台建设上线网站大气蓝色wap网站模板
  • 谷歌云做网站如何做网站的seo优化
  • 做头像网站有哪些工程综合承包
  • 南京响应式网站建设wordpress编辑器排版
  • 北丰科技网站建设做某个网站接口违法
  • 网站备案个人和企业的区别宿迁商城网站建设
  • 网页设计与网站建设简答题可以自己做网站吗
  • 做网站收获了什么网络ip查询网站
  • 民营医院网站建设产品推广怎么做
  • 北京怎么样做网站wordpress数据主机名
  • 网站建设原则包括哪些linkcat wordpress
  • 新网站提交百度收录企业查询系统
  • 做网站后期都用什么软件最简短的培训心得