有很多类似的算法,我在网上找到一个按照几何去解的代码,这次我自己写的是一个安装代数来解的代码。

知识来源是上一篇解n元一次方程组中的文章。我扩展到了三维。方法很简单,就是安装那个文章上的形式写出方程组,解出方程组。

POINT7D AssembleAlgorithm::computeCenterPointImprove(vector<POINT7D> dataList)
{POINT7D r;POINT7D *p1;p1 = new POINT7D[3];p1[0].x=dataList[0].x;p1[1].x=dataList[dataList.size()/2].x;p1[2].x=dataList[dataList.size() - 1].x;p1[0].y=dataList[0].y;p1[1].y=dataList[dataList.size()/2].y;p1[2].y=dataList[dataList.size() - 1].y;p1[0].z=dataList[0].z;p1[1].z=dataList[dataList.size()/2].z;p1[2].z=dataList[dataList.size() - 1].z;AdjustLSM MObj;
//  int nRow=8, nCol=12;double** d = MObj.CreateMatrix(3, 4);d[0][0] = p1[0].x - p1[1].x;d[0][1] = p1[0].y - p1[1].y;d[0][2] = p1[0].z - p1[1].z;d[1][0] = p1[0].x - p1[2].x;d[1][1] = p1[0].y - p1[2].y;d[1][2] = p1[0].z - p1[2].z;d[2][0] = p1[1].x - p1[2].x;d[2][1] = p1[1].y - p1[2].y;d[2][2] = p1[1].z - p1[2].z;//ud[0][3] = (p1[0].x*p1[0].x - p1[1].x*p1[1].x + p1[0].y*p1[0].y - p1[1].y*p1[1].y +p1[0].z*p1[0].z - p1[1].z*p1[1].z)/2.0;d[1][3] = (p1[0].x*p1[0].x - p1[2].x*p1[2].x + p1[0].y*p1[0].y - p1[2].y*p1[2].y +p1[0].z*p1[0].z - p1[2].z*p1[2].z)/2.0;d[2][3] = (p1[1].x*p1[1].x - p1[2].x*p1[2].x + p1[1].y*p1[1].y - p1[2].y*p1[2].y +p1[1].z*p1[1].z - p1[2].z*p1[2].z)/2.0;double* X = this->solveEquationSet(d, 3);

这样你觉得就结束了吗?nonono

因为是3维空间上的点,方程组的约束其实只在二维空间上能找到唯一的点,在三维上可以找到一条直线。

所以还要把解出来的投射到这个平面上。

//点x不一定在这个平面,所以需要投影到平面上去float t1,t2,t3;POINT7D* p =new POINT7D;
<span style="white-space:pre">  </span>//t1,t2,t3是法向量,有其他很多方法可以求,大家可以百度一下,我这里是调用了其他的一个函数this->planeFitting(t1, t2, t3, p, dataList);//求出单位向量float sum_fenmu = sqrt(t1*t1 + t2*t2 + t3*t3);t1 /= sum_fenmu;t2 /= sum_fenmu;t3 /= sum_fenmu;POINT7D tmp;tmp.x = X[0] - p1[0].x;tmp.y = X[1] - p1[0].y;tmp.z = X[2] - p1[0].z;float tmp_muli;tmp_muli = tmp.x*t1 + tmp.y*t2 + tmp.z*t3;tmp.x = tmp_muli*t1;tmp.y = tmp_muli*t2;tmp.z = tmp_muli*t3;r.x = X[0] - tmp.x;r.y = X[1] - tmp.y;r.z = X[2] - tmp.z;return r;
}

这个只是我的程序中的函数我没有把他独立出来,不过有一些基础的人应该改一些东西就能独立使用了。

c++ 三点求外接圆圆心 3维实现相关推荐

  1. 【第4期-智能驾驶汽车系列术语概念解析】第2节:基于三点求外接圆的曲率计算方法

    目录 一.利用三次多项式曲线求曲率的缺陷 二.基于三点求外接圆的曲率计算方法 三.实例介绍 1.MATLAB代码 2. 结果展示 总结 一.利用三次多项式曲线求曲率的缺陷 在第4期第一节中,我们利用三 ...

  2. java求外接圆圆心_由三点三维坐标计算圆半径和圆心位置

    [实例简介] 通过输入任意三点空间坐标自动判断三点是否在一条直线上,若不在则求三点外接圆的圆心位置和半径,计算精度可调节.解决了"知三点求圆心半径"程序对于某些点无法计算的缺陷. ...

  3. java求外接圆圆心_吉软_Java_第六次作业

    编写一个圆类Circle 要求: 1. 该类拥有两个属性: 1) Point p代表圆心 2) float radius代表半径 2. 构造方法 1) Circle() 2) Circle(Point ...

  4. QT快速入门、三点求圆心实现详解

    在编程中,会经常用到数学计算,所以C++将常用的数学计算,例如求正余弦等,封装成函数(正是我们在3.2 数学计算中学习到的),我们只需要写入简单的语句就可以执行所需要的功能,这正是函数的意义.在这一章 ...

  5. 三点求圆心坐标(三角形外心)

    //过三点求圆心坐标 Point waixin(Point a,Point b,Point c) { double a1 = b.x - a.x, b1 = b.y - a.y, c1 = (a1*a ...

  6. 圆上三点求圆心和半径

    下面的程序实现用到C++和OpenCV. 先定义一个用于存储圆的数据的结构体CircleData: struct CircleData {Point2f center;int radius; }; 假 ...

  7. 已知三点求圆心与半径

    已知三点求圆心与半径  kezunhai@gmail.com http://blog.csdn.net/kezunhai 在计算机图像图形学中,经常会用到求圆心或圆半径的情况,本文介绍一种已知三个点求 ...

  8. 三点法求三维坐标精度误差评估实验

    1. 实验目的 1) 对实验做一个系统性的误差评价. 2) 验证本实验的精度能否达到测量空间角的要求. 2.  实验原理 参考论文[1]进行误差评估实验,但是由于论文中的评定指标并不都适合本次实验,所 ...

  9. 三点求外接园,同时计算三点的圆弧弧长,以及半径等信息

    已知三点在圆上,求三点构成的圆弧弧长,以及半径等信息 三点进行求圆弧以及半径,这就需要用到了高中时期的三角函数以及反三角函数进行求解. 首先简单讲解一下思路吧: 1.三点中任意两点构成两条直线,求出直 ...

  10. [转] 二分法求外接圆最大半径

    [转]https://blog.csdn.net/flashmsn/article/details/94642687 题目描述: 给出N个线段长度,试将它们头尾相接组合成一个凸多边形,使凸多边形的外接 ...

最新文章

  1. 浅谈安卓线程池相关问题
  2. LaTex文章中插入Visio及Matlab矢量图
  3. 数据中心ups电源七个故障分析
  4. @ExceptionHandler
  5. MyEclipse10安装SVN插件的几种方法
  6. python强转字符串_在Python 3中将Exception转换为字符串
  7. 理解 __doPostBack--2
  8. 基于社会资源的普通摄像机1400结构化AI算法改造方案
  9. Linux内核系统调用原理与实现
  10. 免费服务器推荐1:无限自由
  11. m3u8手机批量转码_M3U8批量转换器(Android)开发
  12. python爬取网易云音乐 专辑图片+歌词
  13. OpenCV图像的基本操作
  14. antd提交表单_antd快速开发(Form篇)
  15. java中default关键字_Java 中的 default 关键字及代码示例
  16. Lambert漫反射光照模型归纳
  17. discuz 版块导航function_forumlist.php,Discuz! X2扩建左侧版块导航 社区层次一目了然...
  18. H2/H∞半车悬架控制仿真分析
  19. Python 三维绘图
  20. word怎么改一张纸的方向_word怎样单独改变一张纸的方向

热门文章

  1. js版算24点小游戏
  2. selenium安装和下载
  3. 这6款windows办公利器,一定有一款你喜欢的!
  4. TCL语言学习笔记一
  5. java javah_Javah 常见错误记录
  6. 51单片机 wifi模块代码编写的历程 esp8266
  7. IT服务器台账系统,it项目管理信息系统
  8. VBA实例6 CorelDraw 批量生成设备位号、连续编号
  9. pytorch实现segnet_pytorch版segnet复现实践
  10. Ubuntu14.04安装PyV8--学习笔记