四点定球-克拉默法则

一、原理

使用克拉默法则进行四点定球 - 知乎

 

二、代码实现

c++


/// <summary>
///  四个不共面的点 用克拉默法则 计算球心和半径
/// </summary>
/// <param name="p1"></param>
/// <param name="p2"></param>
/// <param name="p3"></param>
/// <param name="p4"></param>
/// <param name="center"></param>
/// <returns></returns>
int  CramerFindCenterByFourPoints(Eigen::Vector3d& p1, Eigen::Vector3d& p2, Eigen::Vector3d& p3, Eigen::Vector3d& p4, Eigen::Vector4d& center)
{

	//1  1-2  3-4  2-3 
	//
	double  a = p1[0] - p2[0];
	double  b = p1[1] - p2[1];
	double  c = p1[2] - p2[2];

	// 
	double  a1 = p3[0] - p4[0];
	double  b1 = p3[1] - p4[1];
	double  c1 = p3[2] - p4[2];

	double  a2 = p2[0] - p3[0];
	double  b2 = p2[1] - p3[1];
	double  c2 = p2[2] - p3[2];


	//2  、
	//        [P]    p=1/2(......)
	//   L =[Q]   Q=1/2(......)
	//        [R]    R=1/2(......)

	double P = (p1[0]* p1[0]- p2[0] * p2[0]   + p1[1] * p1[1] - p2[1] * p2[1]  + p1[2] * p1[2] - p2[2] * p2[2])/2;
	double Q= (p3[0] * p3[0] - p4[0] * p4[0] + p3[1] * p3[1] - p4[1] * p4[1] + p3[2] * p3[2] - p4[2] * p4[2]) / 2;
	double R = (p2[0] * p2[0] - p3[0] * p3[0] + p2[1] * p2[1] - p3[1] * p3[1] + p2[2] * p2[2] - p3[2] * p3[2]) / 2;

	// 3  计算行列式
	//           [  a   b   c  ]
	//    D = [  a1 b1 c1]
	//           [  a2 b2 c2]

	double D= a * b1 * c2 + a2 * b * c1 + c * a1 * b2 - (a2 * b1 * c + a1 * b * c2 + a * b2 * c1);

	// 4 Cramer  计算 
	double Dx = P * b1 * c2 + b * c1 * R + c * Q * b2 - (c * b1 * R + P * c1 * b2 + Q * b * c2);
	double Dy = a * Q * c2 + P * c1 * a2 + c * a1 * R - (c * Q * a2 + a * c1 * R + c2 * P * a1);
	double Dz = a * b1 * R + b * Q * a2 + P * a1 * b2 - (a2 * b1 * P + a * Q * b2 + R * b * a1);

	if (D==0)
	{
		return -1;
	}
	else
	{
		// 
		center[0] = Dx / D;
		center[1] = Dy / D;
		center[2] = Dz / D;
		center[3] = sqrt((p1[0] - center[0]) * (p1[0] - center[0]) + (p1[1] - center[1]) * (p1[1] - center[1]) + (p1[2] - center[2]) * (p1[2] - center[2]));
	}
}

对比

cc 拟合球

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/139744.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

考前须知-2024年上半年系统集成项目管理工程师

可以看看23年下半年软考集成考试的难度 一、考试时间安排&#xff1a; 集成考试一年会考2次&#xff0c;上半年一次、下半年一次。考试时间4h&#xff0c;分批进行 系统集成项目管理工程师教材共655页&#xff0c;分为23章。其中,前3章为信息化与系统集成基础知识的内容,第4章…

阿里回应多款应用崩了

在11月12日晚间&#xff0c;一场突如其来的故障席卷了阿里云&#xff0c;导致包括淘宝、钉钉、阿里云盘在内的多款应用无法正常使用。这场故障引起了用户和业界的广泛关注&#xff0c;许多用户纷纷在社交媒体上表达了对此的不满和担忧。据用户反馈&#xff0c;当晚突然发现包括…

python中的字符串转字节码

res int.from_bytes(hello.encode(), byteorderlittle)res的结果为478560413032&#xff0c;这个结果怎么计算得到的呢&#xff1f; 将hello的每个字母的ascii码从右往左排列&#xff0c;拼接起来转成十进制就是res的结果。 拼接的结果为&#xff1a;011011110110110001101100…

【Unity插件】2D模拟绳子的插件——Rope 2D Editor

文章目录 前言资源unity商店地址&#xff1a;我这里有一个比较老旧的版本&#xff1a; 使用创建绳子场景使用时效果 参考完结 前言 最近发现一个很有意思的插件Rope 2D Editor&#xff0c;这是一个简单而强大的 2d 绳索编辑器。这是我为我的游戏&#xff08;Dabdob&#xff09…

[WSL] 安装hive3.1.2成功后, 使用datagrip连接失败

org.apache.hadoop.ipc.RemoteException:User: xxx is not allowed to impersonate anonymous 下载driver-hive-jdbc-3.1.2-standalone 解决 修改hadoop 配置文件 etc/hadoop/core-site.xml,加入如下配置项 <property><name>hadoop.proxyuser.你的用户名.hosts…

Postgresql数据类型-数组类型

PostgreSQL支持一维数组和多维数组&#xff0c;常用的数组类型为数字类型数组和字符型数组&#xff0c;也支持枚举类型、复合类型数组。 数组类型定义 先来看看数组类型的定义&#xff0c;创建表时在字段数据类型后面加方括号“[]”即可定义数组数据类型&#xff0c;如下所示…

全志R128平台SPI与DBI点屏性能大对比

SPI 与 DBI 性能对比 R128 平台的 SPI 接口参数如下 全双工同步串行接口Master/Slave模式可配置支持最大96MHz时钟频率支持SPI Mode0/1/2/3片选和时钟的极性和相位可配置5个时钟源支持中断或DMA传输支持多片选支持Standard Single/Dual/Quad SPI&#xff0c;FIFO深度64B支持B…

Qt高级--(1)自定义导航栏

好久没有水博客&#xff0c;参考别人的写一个自定义的导航栏吧。用处挺多的&#xff0c;可以用来切换到不同的信息显示界面。 功能点 1.默认情况下&#xff0c;文字居中显示&#xff0c;不显示图标&#xff0c;不显示三角。 2.可设置文字左侧、顶部、右侧、底部边距&#xff…

功率放大器在微流控测试中的应用有哪些

微流控技术是一种在纳米或微米尺度上操作和控制流体的技术&#xff0c;它在生物医学、化学分析和材料科学等领域具有广泛的应用前景。然而&#xff0c;由于微流控系统中涉及到的流体操作和流动过程往往需要较高的电压和电流&#xff0c;因此在微流控测试中常常需要使用功率放大…

网络问题导致pycharm无法提交代码到代码仓库

现象 ssh: Could not resolve hostname github.com: Name or service not known fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 原因及解决办法 可能不是自己权限有问题&#xff0c;而是…

伦敦银为什么降价

作为贵金属家族中的一员&#xff0c;白银具有一定的金融属性&#xff0c;但它同时也是一种工业金属&#xff0c;在太阳能、汽车、电子工业上有着广泛的用途&#xff0c;所以其价格会受到诸多因素的影响。伦敦银作为紧密跟着国际现货白银价格走势的品种&#xff0c;其降价的原因…

Python高级语法----高级Python函数式编程

文章目录 1. 函数式编程概念2. 使用functools模块3. 深入理解lambda, map, filter, reduce函数a. lambda 函数b. map 函数c. filter 函数d. reduce 函数1. 函数式编程概念 函数式编程是一种编程范式,它将计算视为函数的评估,并避免使用程序状态及可变数据。在Python中,函数…

git 命令行回退版本

git 命令行回退版本 git 命令行回退版本命令: 1.切换到需要回退的分支 git checkout branch-v2.0.02.更新远程分支 git fetch3.找到需要回退版本的版本号git revert a6914da55ff40a09e67ac2426b86f1212e6580eb4.清除工作区缓存git clean -df5.强制提交git push -f

软件外包开发的需求对接

软件外包开发的成功与否很大程度上取决于需求对接的有效性。以下是一些建议&#xff0c;可帮助您在软件外包开发中进行需求对接&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.明确业务目标和需求&…

个推用户运营全新上线用户生命周期管理功能,助力APP快速实现用户精细化运营

近期&#xff0c;个推用户运营上线了APP用户生命周期管理功能。该功能可以帮助APP多维度洞察⽤户所处的⽣命周期分布&#xff0c;旨在帮助运营人员快速全面地了解用户&#xff0c;从而基于用户生命周期针对性地做出用户运营策略调整&#xff0c;提升用户价值和运营指标。 个推如…

数据结构——AVL树

搜索二叉树能够在二叉树情况比较好的情况下&#xff0c;使查找的时间复杂度达到O(logN)。 但是&#xff0c;它的查找的时间复杂度依旧是O(N)&#xff0c;面临的情况是所有的树都只有左/右子树的情况下。 那么今天介绍的AVL树就是解决这一情况的。 但是由于AVL树对我来说有些复杂…

ElementUI表格el-table自适应高度(表头表尾固定不动)

ElementUI表格el-table自适应高度&#xff08;表头表尾固定不动&#xff09;&#xff0c;内容只在中间滚动&#xff0c;效果如图&#xff1a; 实现代码 <div class"mt-10" :style"{height:tableHeight}"><div class"operation-bar">…

算法通关村第八关-黄金挑战

大家好我是苏麟 ...... 路径总和2 描述 : 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 题目 : LeetCode 113.路径总和2 113. 路径总和 II 分析 : 这…

uni-app的下拉搜索选择组合框

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家介绍uni-app中一款可以搜索下拉选择输入框的插件 下拉搜索选择组合框 superwei-combox 组合框 uni-app中可下拉搜索选…

智能配方颗粒管理系统解决方案,专业实现中医药产业数字化-亿发

“中药配方颗粒”&#xff0c;又被称为免煎中药&#xff0c;源自传统中药饮片&#xff0c;经过提取、分离、浓缩、干燥、制粒、包装等工艺加工而成。这种新型配方药物完整保留了原中药饮片的所有特性。既能满足医师的辨证论治和随症加减需求&#xff0c;同时具备强劲好人高效的…