参考:http://blog.sina.com.cn/s/blog_648868460100h2b8.html(这个博主还有很多关于工程测量的知识和空间几何计算的知识)

已知空间三点的坐标为(x1,y1,z1),(x2,y2,z2),(x3,y3,z3),求这三个点所确定的空间圆的圆心坐标和半径。

分析可得约束条件:1、三点共面2、三点到空间圆心坐标的距离相等。

从约束条件可得,4个自由项4个方程可解,可以列出线性代数方程组,即可用消元法求解;

即以下的(1)(2)(3)(4)四个方程组成的线性代数方程组

共面约束:

三点到空间圆心坐标的距离相等约束:

(1) (2)(3)联解可得(5)(6)同时消去R

通过(4)(5)(6)获得关于圆心空间坐标的线性代数方程组

利用opencv2.1实现的代码如下:

CvScalar xyz1,CvScalar xyz2,CvScalar xyz3 分别为空间三点坐标

//从空间圆上三点获得所在圆的空间中心坐标
CvMat * GETIrisCenter(CvScalar xyz1,CvScalar xyz2,CvScalar xyz3)
{

double ABCD1[4];
 double ABCD2[4];
 double ABCD3[4];

ABCD1[0]=xyz1.val[1]*xyz2.val[2]-xyz1.val[1]*xyz3.val[2]-xyz1.val[2]*xyz2.val[1]+xyz1.val[2]*xyz3.val[1]+xyz2.val[1]*xyz3.val[2]-xyz3.val[1]*xyz2.val[2];
 ABCD1[1]=-xyz1.val[0]*xyz2.val[2]+xyz1.val[0]*xyz3.val[2]+xyz1.val[2]*xyz2.val[0]-xyz1.val[2]*xyz3.val[0]-xyz2.val[0]*xyz3.val[2]+xyz3.val[0]*xyz2.val[2];
 ABCD1[2]=xyz1.val[0]*xyz2.val[1]-xyz1.val[0]*xyz3.val[1]-xyz1.val[1]*xyz2.val[0]+xyz1.val[1]*xyz3.val[0]+xyz2.val[0]*xyz3.val[1]-xyz3.val[0]*xyz2.val[1];
 ABCD1[3]=-xyz1.val[0]*xyz2.val[1]*xyz3.val[2]+xyz1.val[0]*xyz3.val[1]*xyz2.val[2]+xyz2.val[0]*xyz1.val[1]*xyz3.val[2]-xyz3.val[0]*xyz1.val[1]*xyz2.val[2]-xyz2.val[0]*xyz3.val[1]*xyz1.val[2]+xyz3.val[0]*xyz2.val[1]*xyz1.val[2];
 
 ABCD2[0]=(xyz2.val[0]-xyz1.val[0])*2;
 ABCD2[1]=(xyz2.val[1]-xyz1.val[1])*2;
 ABCD2[2]=(xyz2.val[2]-xyz1.val[2])*2;
 ABCD2[3]=xyz1.val[0]*xyz1.val[0]+xyz1.val[1]*xyz1.val[1]+xyz1.val[2]*xyz1.val[2]-(xyz2.val[0]*xyz2.val[0]+xyz2.val[1]*xyz2.val[1]+xyz2.val[2]*xyz2.val[2]);

ABCD3[0]=(xyz3.val[0]-xyz1.val[0])*2;
 ABCD3[1]=(xyz3.val[1]-xyz1.val[1])*2;
 ABCD3[2]=(xyz3.val[2]-xyz1.val[2])*2;
 ABCD3[3]=xyz1.val[0]*xyz1.val[0]+xyz1.val[1]*xyz1.val[1]+xyz1.val[2]*xyz1.val[2]-(xyz3.val[0]*xyz3.val[0]+xyz3.val[1]*xyz3.val[1]+xyz3.val[2]*xyz3.val[2]);
 CvMat *ABC_mat=cvCreateMat(3,3,CV_64F);
 CvMat *D_mat=cvCreateMat(3,1,CV_64F);
 CvMat *Solve_mat=cvCreateMat(3,1,CV_64F);
 for(int i=0;i<3;i++)
 {
 
 cvSetReal2D(ABC_mat,0,i,ABCD1[i]) ;
 cvSetReal2D(ABC_mat,1,i,ABCD2[i]) ;
 cvSetReal2D(ABC_mat,2,i,ABCD3[i]) ;
 
        
 }
 
cvSetReal2D(D_mat,0,0,ABCD1[3]) ;
cvSetReal2D(D_mat,1,0,ABCD2[3]) ;
cvSetReal2D(D_mat,2,0,ABCD3[3]) ;
 CvMat *ABC_mat_Invert=cvCreateMat(3,3,CV_64F);
double InvertNum=cvInvert(ABC_mat,ABC_mat_Invert,CV_LU);//求逆

cvGEMM(ABC_mat_Invert,D_mat,-1,NULL,0,Solve_mat,0);//矩阵相乘

double r1=0;
double r2=0;
double r3=0;
for(int i=0;i<3;i++)//通过计算三点到中心的距离测试结果是否正确
{
 r1=(cvGetReal2D(Solve_mat,i,0)-xyz1.val[i])*(cvGetReal2D(Solve_mat,i,0)-xyz1.val[i])+r1;
  r2=(cvGetReal2D(Solve_mat,i,0)-xyz2.val[i])*(cvGetReal2D(Solve_mat,i,0)-xyz2.val[i])+r2;
   r3=(cvGetReal2D(Solve_mat,i,0)-xyz3.val[i])*(cvGetReal2D(Solve_mat,i,0)-xyz3.val[i])+r3;
}
cvReleaseMat(&ABC_mat);
cvReleaseMat(&D_mat);
cvReleaseMat(&ABC_mat_Invert);
return Solve_mat;//返回中心坐标矩阵
}

空间3点求三点所在空间圆的圆心空间坐标相关推荐

  1. MATLAB求图片两圆圆心,求助:如何求此图中两圆的圆心距?

    对于你给出的图片,我根据之前提到的思路编写了以下程序.感觉还蛮准的.这个程序只能用于两圆相交的情况.当小圆在大圆内部时,需要在其中加以判定.仅供参考. clear;clc c = imread('1. ...

  2. 视觉SLAM笔记(35) 三角化求特征点的空间位置

    视觉SLAM笔记(35) 三角化求特征点的空间位置 1. 特征点的空间位置 2. 三角测量函数 3. 求特征点的空间位置 1. 特征点的空间位置 在 视觉SLAM笔记(31) 特征提取和匹配 已求出特 ...

  3. MNI152 坐标空间和 fsaverage 坐标空间相互转换, 如已知fsaverage空间的坐标如何求MNI152 坐标?aparc.a2009s.annot转化到MNI152空间?

    MNI152 坐标空间和 fsaverage 坐标空间相互转换 原理 下载和安装 调用脚本 求aparc.a2009s.annot的MNI152空间的坐标 Step1: 从fsaverage转化到MN ...

  4. Windows驱动开发学习笔记(三)—— 内核空间内核模块

    Windows驱动开发学习笔记(三)-- 内核空间&内核模块 内核空间 实验 第一步:编译如下代码 第二步:将 .sys 文件拷贝到虚拟机中 第三步:部署 .sys 文件并运行 第四步:创建一 ...

  5. 操作系统实验三:主存空间的分配与回收

    实验三:主存空间的分配与回收 一.实验目的 通过本次实验,帮助学生理解在可变式分区管理方式下,如何实现主存空间的分配与回收. 二.实验内容 主存是中央处理机能直接存取指令和数据的存储器.能否合理而有效 ...

  6. 数字图像处理之matlab实验(三):空间滤波器

    1.空间滤波原理 空间滤波,就是在原图像上,用一个固定尺寸的模板去做卷积运算,得到的新图像就是滤波结果.滤波,就是过滤某种信号的意思.过滤哪种信号取决于模板设计,如果是锐化模板,处理后就保留高频信号, ...

  7. 二进制空间权重矩阵_白话空间统计之二十五:空间权重矩阵(三)解构空间权重矩阵...

    原标题:白话空间统计之二十五:空间权重矩阵(三)解构空间权重矩阵 中国古代就有"天圆地方"一说,所谓的"方"就是所谓的矩阵-- 在军事上面,最为讲究就是团体的力 ...

  8. 怎样用计算机设置隐私空间,华为手机的三种隐私设置,开放的秘密空间,永远不用担心女友检查手机!...

    现在人们越来越关注手机. 除了专注于手机功能之外,越来越多的人开始关注手机的隐私. 在许多情况下,陌生人或不太亲密的人不可避免地会借用手机. 我相信很不会拒绝. 但是他们也担心会滑手看到自己的私人物品 ...

  9. 白话空间统计番外三:空间统计的基础理论

    空间统计学是统计学的一个分支,有很多与统计学相同的地方,也有很多有自身特点的,地方,今天我们就来聊聊空间统计学的四大基础理论: 首先就是空间概率 统计学是一门计算很研究概率的学问,一般的描述方式都是& ...

最新文章

  1. nbu oracle 冷备_NBU备份系统应用操作手册..doc
  2. ajax点赞只能点一次,php+mysql+ajax局部刷新点赞取消点赞功能(每个账号只点赞一次).pdf...
  3. 改革以来计算机应用发展总结,计算机应用专业课程改革总结.doc
  4. 解决eclipse中出现Resource is out of sync with the file system问题
  5. php导出excel2007实例,PHPExcel精简版与导入导出案例
  6. 【Cocos2d-x】源代码分析之 2d/ui/Widget
  7. java事件的接收_spring发布和接收定制的事件(spring事件传播)
  8. 基于Java线程池读取数据库中数据(学习+运用)
  9. html改元素怎么保存,是否可以在NW.js中保存html元素更改?
  10. 浪潮商用机器与腾讯TDSQL完成互认证 共同拓展Power行业生态
  11. android广播注册源码,android 广播源码简要分析-注册
  12. 新入职了一个卷王 , 天天加班12点!张口闭口就手写spring , 太让人崩溃了......
  13. vue导出数据为excel且设置样式
  14. 大学排行榜 : qs全球世界 大学排行榜
  15. linux下要熟练掌握的常用快捷键和命令
  16. 简述修改 MySQL 配置文件的方法_修改mysql配置文件的方法举例
  17. python入门小项目-判断闰年的两种方法(含代码示例)
  18. 深度学习在智能交通的应用--综述
  19. 最新170个站长在线工具箱网站源码/野兔在线工具系统V2.4.1中文版
  20. window下解压.tar文件的软件

热门文章

  1. 全球与中国太阳能测试仪市场现状及未来发展趋势
  2. 字节辟谣被裁员工与 HR 互殴;苹果头显多个新功能曝光;谷歌希望 RISC-V 成为 T1 级 Android 架构|极客头条
  3. 关于 SAP ABAP 报表的多语言显示问题试读版
  4. 数据分析之 —— 常用的统计学指标
  5. 亲戚关系(并查集(YYOJ
  6. 如何将高效设计应用于 DAO?
  7. mermaid制作饼图
  8. ASP.NET profile之 找不到存储过程dbo.aspnet_CheckSchemaVersion
  9. windows下整数分区的计算方法
  10. 在网页项目中集成扫码枪设备,实现二维码扫码识别实战