空间3点求三点所在空间圆的圆心空间坐标
参考: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点求三点所在空间圆的圆心空间坐标相关推荐
- MATLAB求图片两圆圆心,求助:如何求此图中两圆的圆心距?
对于你给出的图片,我根据之前提到的思路编写了以下程序.感觉还蛮准的.这个程序只能用于两圆相交的情况.当小圆在大圆内部时,需要在其中加以判定.仅供参考. clear;clc c = imread('1. ...
- 视觉SLAM笔记(35) 三角化求特征点的空间位置
视觉SLAM笔记(35) 三角化求特征点的空间位置 1. 特征点的空间位置 2. 三角测量函数 3. 求特征点的空间位置 1. 特征点的空间位置 在 视觉SLAM笔记(31) 特征提取和匹配 已求出特 ...
- MNI152 坐标空间和 fsaverage 坐标空间相互转换, 如已知fsaverage空间的坐标如何求MNI152 坐标?aparc.a2009s.annot转化到MNI152空间?
MNI152 坐标空间和 fsaverage 坐标空间相互转换 原理 下载和安装 调用脚本 求aparc.a2009s.annot的MNI152空间的坐标 Step1: 从fsaverage转化到MN ...
- Windows驱动开发学习笔记(三)—— 内核空间内核模块
Windows驱动开发学习笔记(三)-- 内核空间&内核模块 内核空间 实验 第一步:编译如下代码 第二步:将 .sys 文件拷贝到虚拟机中 第三步:部署 .sys 文件并运行 第四步:创建一 ...
- 操作系统实验三:主存空间的分配与回收
实验三:主存空间的分配与回收 一.实验目的 通过本次实验,帮助学生理解在可变式分区管理方式下,如何实现主存空间的分配与回收. 二.实验内容 主存是中央处理机能直接存取指令和数据的存储器.能否合理而有效 ...
- 数字图像处理之matlab实验(三):空间滤波器
1.空间滤波原理 空间滤波,就是在原图像上,用一个固定尺寸的模板去做卷积运算,得到的新图像就是滤波结果.滤波,就是过滤某种信号的意思.过滤哪种信号取决于模板设计,如果是锐化模板,处理后就保留高频信号, ...
- 二进制空间权重矩阵_白话空间统计之二十五:空间权重矩阵(三)解构空间权重矩阵...
原标题:白话空间统计之二十五:空间权重矩阵(三)解构空间权重矩阵 中国古代就有"天圆地方"一说,所谓的"方"就是所谓的矩阵-- 在军事上面,最为讲究就是团体的力 ...
- 怎样用计算机设置隐私空间,华为手机的三种隐私设置,开放的秘密空间,永远不用担心女友检查手机!...
现在人们越来越关注手机. 除了专注于手机功能之外,越来越多的人开始关注手机的隐私. 在许多情况下,陌生人或不太亲密的人不可避免地会借用手机. 我相信很不会拒绝. 但是他们也担心会滑手看到自己的私人物品 ...
- 白话空间统计番外三:空间统计的基础理论
空间统计学是统计学的一个分支,有很多与统计学相同的地方,也有很多有自身特点的,地方,今天我们就来聊聊空间统计学的四大基础理论: 首先就是空间概率 统计学是一门计算很研究概率的学问,一般的描述方式都是& ...
最新文章
- nbu oracle 冷备_NBU备份系统应用操作手册..doc
- ajax点赞只能点一次,php+mysql+ajax局部刷新点赞取消点赞功能(每个账号只点赞一次).pdf...
- 改革以来计算机应用发展总结,计算机应用专业课程改革总结.doc
- 解决eclipse中出现Resource is out of sync with the file system问题
- php导出excel2007实例,PHPExcel精简版与导入导出案例
- 【Cocos2d-x】源代码分析之 2d/ui/Widget
- java事件的接收_spring发布和接收定制的事件(spring事件传播)
- 基于Java线程池读取数据库中数据(学习+运用)
- html改元素怎么保存,是否可以在NW.js中保存html元素更改?
- 浪潮商用机器与腾讯TDSQL完成互认证 共同拓展Power行业生态
- android广播注册源码,android 广播源码简要分析-注册
- 新入职了一个卷王 , 天天加班12点!张口闭口就手写spring , 太让人崩溃了......
- vue导出数据为excel且设置样式
- 大学排行榜 : qs全球世界 大学排行榜
- linux下要熟练掌握的常用快捷键和命令
- 简述修改 MySQL 配置文件的方法_修改mysql配置文件的方法举例
- python入门小项目-判断闰年的两种方法(含代码示例)
- 深度学习在智能交通的应用--综述
- 最新170个站长在线工具箱网站源码/野兔在线工具系统V2.4.1中文版
- window下解压.tar文件的软件