已知空间三点的坐标,求这三个点所确定的空间圆的圆心坐标和半径

在机器人轨迹规划处理中经常用到,查找资料找到一份可用的,经代码测试没问题特此记录:

原理

已知空间三点(x1,y1,z1), (x2,y2,z2),(x3,y3,z3),求圆心(x0, y0, z0)和半径R

2个约束条件:1、三点共面 2、 三点到圆心距离相等

根据三点到圆心距离相等可以建立方程组:

image.png

用消元法消去R,联立(1)(2)可得(5)

image.png

联立(1)(3)可得(6)

image.png

image.png

根据三点共面约束可确定平面方程得(4)

image.png

通过以上(4)(5)(6)获得得A~D系数建立线性方程组,三个未知数三个方程即可求解圆心和半径

image.png

image.png

代码

#include "Eigen\dense"

using namespace Eigen;

/*

* 根据不共线的空间三点计算圆心坐标

* @points 三个点的坐标数组

* @return 返回圆心坐标

*/

Vector3d getCenterOfCircle(const vector& points)

{

if (points.size() > 3 || points.size() <= 0) {

#ifndef NDEBUG

puts("[getCenterOfCircle] 参数的数量有误");

#endif

return Vector3d::Zero();

}

double x1 = points[0].x(),

x2 = points[1].x(),

x3 = points[2].x();

double y1 = points[0].y(),

y2 = points[1].y(),

y3 = points[2].y();

double z1 = points[0].z(),

z2 = points[1].z(),

z3 = points[2].z();

double a1 = (y1*z2 - y2*z1 - y1*z3 + y3*z1 + y2*z3 - y3*z2),

b1 = -(x1*z2 - x2*z1 - x1*z3 + x3*z1 + x2*z3 - x3*z2),

c1 = (x1*y2 - x2*y1 - x1*y3 + x3*y1 + x2*y3 - x3*y2),

d1 = -(x1*y2*z3 - x1*y3*z2 - x2*y1*z3 + x2*y3*z1 + x3*y1*z2 - x3*y2*z1);

double a2 = 2 * (x2 - x1),

b2 = 2 * (y2 - y1),

c2 = 2 * (z2 - z1),

d2 = x1*x1 + y1*y1 + z1*z1 - x2*x2 - y2*y2 - z2*z2;

double a3 = 2 * (x3 - x1),

b3 = 2 * (y3 - y1),

c3 = 2 * (z3 - z1),

d3 = x1*x1 + y1*y1 + z1*z1 - x3*x3 - y3*y3 - z3*z3;

double cx = -(b1*c2*d3 - b1*c3*d2 - b2*c1*d3 + b2*c3*d1 + b3*c1*d2 - b3*c2*d1)

/(a1*b2*c3 - a1*b3*c2 - a2*b1*c3 + a2*b3*c1 + a3*b1*c2 - a3*b2*c1);

double cy = (a1*c2*d3 - a1*c3*d2 - a2*c1*d3 + a2*c3*d1 + a3*c1*d2 - a3*c2*d1)

/(a1*b2*c3 - a1*b3*c2 - a2*b1*c3 + a2*b3*c1 + a3*b1*c2 - a3*b2*c1);

double cz = -(a1*b2*d3 - a1*b3*d2 - a2*b1*d3 + a2*b3*d1 + a3*b1*d2 - a3*b2*d1)

/(a1*b2*c3 - a1*b3*c2 - a2*b1*c3 + a2*b3*c1 + a3*b1*c2 - a3*b2*c1);

return Vector3d(cx, cy, cz);

}

已知空间三点求圆心c语言,空间三点计算圆心坐标和半径相关推荐

  1. 已知前序中序求层序 c语言递归,二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现...

    # re: 二叉树的遍历:前序,中序输出有点问题,但是不知道到怎么修改,想请教各位大神  回复  更多评论 #include"stdio.h" #include"mall ...

  2. matlab已知三点求夹角,已知3点如何求其中两点对第3点的夹角

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:已知3点如何求其中两点对第3点的夹角? 问题详情:有3个问题:1)已知3点如何求其中两点对第3点的夹角?2)如何回答:1)已知3点求 ...

  3. 已知网络号如何求子网掩码?

    已知网络号如何求子网掩码? (2012-06-14 15:16:06)转载▼ IP地址常采用点分十进制表示方法:X.Y.Y.Y,在这里,X=1–126时称为A类地址; X=128–191时成为B类地址 ...

  4. 【运筹学】对偶理论 : 互补松弛定理应用 ( 原问题与对偶问题标准形式 | 已知原问题最优解求对偶问题最优解 | 使用单纯形法求解 | 使用互补松弛定理公式一求解 | 互补松弛定理公式二无效 ) ★★

    文章目录 一.原问题与对偶问题标准形式 二.互补松弛定理 三.已知原问题最优解求对偶问题最优解 四.使用单纯形法求解 五.使用互补松弛定理公式一求解 六.使用互补松弛定理公式二求解 ( 无效方法 ) ...

  5. 数学 - 已知三角形三边长度求面积

    数学 - 已知三角形三边长度求面积 重要提示 本文仅适合电脑及部分平板阅读,手机使用者请尽早退出,谢谢! 前言 难得有点时间来写文章,正好今天(2022/9/30)算了这个公式,就把它记录下来 另外, ...

  6. 二叉树的遍历(前序、中序、后序、已知前中序求后序、已知中后序求前序)

    二叉树的遍历(前序.中序.后序.已知前中序求后序.已知中后序求前序)   之前的一篇随笔(二叉树.前序遍历.中序遍历.后序遍历)只对二叉树的遍历进行了笼统的描述,这篇随笔重点对前.中.后序的遍历顺序进 ...

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

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

  8. 已知入栈顺序求所有的出栈顺序已知出栈顺序求所有的入栈顺序

    一.已知入栈顺序求所有的出栈顺序 已知入栈顺序是{1,2,3,4,5},求所有的出栈顺序? 我的思路: 既然入栈顺序固定,我觉得可以使用递归来做. 先定义一个函数,比如说叫做help. //伪代码 v ...

  9. c语言已知加速度求位移速度,已知初速度,加速度,时间,求位移

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:已知初速度,加速度,时间,求位移回答:其实你套公式即可.先说第一问,用公式S=vt+1/2*at^2 初速度已知为10,即V为10, ...

  10. 已知矩形面积,求最小周长

    1283 最小周长 1.0 秒 131,072.0 KB 20 分 初学者3级题 一个矩形的面积为S,已知该矩形的边长都是整数,求所有满足条件的矩形中,周长的最小值.例如:S = 24,那么有{1 2 ...

最新文章

  1. Leetcode 122. 买卖股票的最佳时机 II 解题思路及C++实现
  2. spark源码编译记录
  3. Codeforces Round #698 (Div. 2)
  4. iOS: 图解Xcode常用的快捷键
  5. 【Nginx】通过反向代理配置本地图床功能
  6. 亚马逊深度学习库_汽车Linux,8位社交,与Amazon的深度学习以及更多新闻
  7. 全面开放运营3个月,百度揭秘Apollo最新技术创新
  8. MATLAB对表达式进行降幂排列,MATLAB上机答案.doc
  9. Android中删除照片操作
  10. 统计字符串出现的次数(参照传智播客视频)
  11. NLP论文阅读1--More Data, More Relations, More Context and More Openness: A Review and Outlook for Relati
  12. python实现单机斗地主_用Python破解斗地主残局
  13. 看懂Azure DevOps燃尽图(Burndown Chart)
  14. 3D模型:免费3D模型下载网站推荐
  15. 2016级移动应用开发在线测试14-MediaPlayer
  16. oracle 迁移到另一台服务器上,Oracle数据库迁移(从一台服务器迁移到另一台服务器)...
  17. ubuntu慢?如何给 ubuntu 换源 提速
  18. 简单聊聊HDFS RBF第二阶段工作近期的一些进展
  19. 一文教你Kali信息收集
  20. 使用image-map编写校区平面示意图

热门文章

  1. 【报错】Failed to start A high performance web server and a reverse proxy server.
  2. 2021年PMP考试最新通关宝典
  3. i3 2310M i7 9700T i7 9700K MacBookPro 16寸 CPU 跑分对比
  4. 微软商店点下载没反应
  5. 数字逻辑电路学习笔记
  6. topjui中datagrid增删改查
  7. 飞行堡垒FX80GM热键无反应与触摸板无法使用
  8. 【prescan入门】prescan入门教程(场景搭建、参数设置、连接MATLAB实现仿真)
  9. jsp物流配送管理系统
  10. c语言标准流程图,c语言设计流程图!设计流程图