使用克拉默法则进行三点定圆(二维)

目录

  • 1.二维圆
  • 2.python代码
  • 3.计算结果

在这里插入图片描述

本文由CSDN点云侠原创,爬虫网站请自重。

1.二维圆

  已知不共线的三个点,设其坐标为 ( x 1 , y 1 ) (x_1,y_1) (x1,y1) ( x 2 , y 2 ) (x_2,y_2) (x2,y2) ( x 3 , y 3 ) (x_3,y_3) (x3,y3),圆的一般方程为:
A ( x 2 + y 2 ) + B x + C y + D = 0 (1) A(x^2+y^2)+Bx+Cy+D=0\tag{1} A(x2+y2)+Bx+Cy+D=0(1)
将式(1)变形可得圆的标准方程为:
( x + B 2 A ) 2 + ( y + C 2 A ) 2 = B 2 + C 2 − 4 A D 4 A 2 (2) (x+\frac{B}{2A})^2+(y+\frac{C}{2A})^2=\frac{B^2+C^2-4AD}{4A^2}\tag{2} (x+2AB)2+(y+2AC)2=4A2B2+C24AD(2)
将三个已知点代入式(1),可得关于 A , B , C , D A,B,C,D A,B,C,D的齐次线性方程组:

[ x 2 + y 2 x y 1 x 1 2 + y 1 2 x 1 y 1 1 x 2 2 + y 2 2 x 2 y 2 1 x 3 2 + y 3 2 x 3 y 3 1 ] ⋅ [ A B C D ] = [ 0 0 0 0 ] (3) \left[ \begin{matrix} x^2+y^2 & x & y&1\\ x_1^2+y_1^2 & x_1 & y_1&1 \\ x_2^2+y_2^2 & x_2 & y_2&1 \\ x_3^2+y_3^2 & x_3 & y_3&1 \\ \end{matrix} \right]\cdot \left[ \begin{matrix} A\\ B \\ C \\ D \\ \end{matrix} \right]= \left[ \begin{matrix} 0\\ 0 \\ 0 \\ 0 \\ \end{matrix} \right]\tag{3} x2+y2x12+y12x22+y22x32+y32xx1x2x3yy1y2y31111 ABCD = 0000 (3)
在三点不共线的前提下,该齐次线性方程组有非零解,其等价于系数矩阵不满秩,即有:

∣ x 2 + y 2 x y 1 x 1 2 + y 1 2 x 1 y 1 1 x 2 2 + y 2 2 x 2 y 2 1 x 3 2 + y 3 2 x 3 y 3 1 ∣ = 0 (4) \left| \begin{matrix} x^2+y^2 & x & y&1\\ x_1^2+y_1^2 & x_1 & y_1&1 \\ x_2^2+y_2^2 & x_2 & y_2&1 \\ x_3^2+y_3^2 & x_3 & y_3&1 \\ \end{matrix} \right|=0\tag{4} x2+y2x12+y12x22+y22x32+y32xx1x2x3yy1y2y31111 =0(4)
将式(4)展开,并与式(1)对比可得四个系数:
A = + ∣ x 1 y 1 1 x 2 y 2 1 x 3 y 3 1 ∣ (5) A=+\left| \begin{matrix} x_1 & y_1&1 \\ x_2 & y_2&1 \\ x_3 & y_3&1 \\ \end{matrix} \right|\tag{5} A=+ x1x2x3y1y2y3111 (5)

B = − ∣ x 1 2 + y 1 2 y 1 1 x 2 2 + y 2 2 y 2 1 x 3 2 + y 3 2 y 3 1 ∣ (6) B=-\left| \begin{matrix} x_1^2+y_1^2& y_1&1 \\ x_2^2+y_2^2 & y_2&1 \\ x_3^2+y_3^2 & y_3&1 \\ \end{matrix} \right|\tag{6} B= x12+y12x22+y22x32+y32y1y2y3111 (6)

C = + ∣ x 1 2 + y 1 2 x 1 1 x 2 2 + y 2 2 x 2 1 x 3 2 + y 3 2 x 3 1 ∣ (7) C=+\left| \begin{matrix} x_1^2+y_1^2 & x_1 &1 \\ x_2^2+y_2^2 & x_2 &1 \\ x_3^2+y_3^2 & x_3 &1 \\ \end{matrix} \right|\tag{7} C=+ x12+y12x22+y22x32+y32x1x2x3111 (7)

D = − ∣ x 1 2 + y 1 2 x 1 y 1 x 2 2 + y 2 2 x 2 y 2 x 3 2 + y 3 2 x 3 y 3 ∣ (8) D=-\left| \begin{matrix} x_1^2+y_1^2 & x_1 & y_1 \\ x_2^2+y_2^2 & x_2 & y_2 \\ x_3^2+y_3^2 & x_3 & y_3 \\ \end{matrix} \right|\tag{8} D= x12+y12x22+y22x32+y32x1x2x3y1y2y3 (8)
由式(2)可得圆心坐标 ( x c , y c ) (x_c,y_c) (xc,yc)和半径 r r r,即
{ x c = − B 2 A y c = − C 2 A r = B 2 + C 2 − 4 A D 4 A 2 (9) \begin{cases} x_c=-\frac{B}{2A}\\ y_c=-\frac{C}{2A}\\ r=\sqrt\frac{B^2+C^2-4AD}{4A^2} \end{cases} \tag{9} xc=2AByc=2ACr=4A2B2+C24AD (9)

2.python代码

import numpy as npdef three_points_fit_circle(points):P1 = points[0]P2 = points[1]P3 = points[2]# 共线检查temp01 = P1 - P2temp02 = P3 - P2temp03 = np.cross(temp01, temp02)temp = (temp03 @ temp03) / (temp01 @ temp01) / (temp02 @ temp02)if temp < 10 ** -6:print('\t三点共线, 无法确定圆')return NoneA = np.ones((3, 3))A[0, 0] = P1[0]A[0, 1] = P1[1]A[1, 0] = P2[0]A[1, 1] = P2[1]A[2, 0] = P3[0]A[2, 1] = P3[1]B = np.ones((3, 3))B[0, 0] = P1[0] ** 2 + P1[1] ** 2B[0, 1] = P1[1]B[1, 0] = P2[0] ** 2 + P2[1] ** 2B[1, 1] = P2[1]B[2, 0] = P2[0] ** 2 + P2[1] ** 2B[2, 1] = P3[1]C = np.ones((3, 3))C[0, 0] = P1[0] ** 2 + P1[1] ** 2C[0, 1] = P1[0]C[1, 0] = P2[0] ** 2 + P2[1] ** 2C[1, 1] = P2[0]C[2, 0] = P2[0] ** 2 + P2[1] ** 2C[2, 1] = P3[0]D = np.ones((3, 3))D[0, 0] = P1[0] ** 2 + P1[1] ** 2D[0, 1] = P1[0]D[0, 2] = P1[1]D[1, 0] = P2[0] ** 2 + P2[1] ** 2D[1, 1] = P2[0]D[1, 2] = P2[1]D[2, 0] = P2[0] ** 2 + P2[1] ** 2D[2, 1] = P3[0]D[2, 2] = P3[1]A = +np.linalg.det(A)B = -np.linalg.det(B)C = +np.linalg.det(C)D = -np.linalg.det(D)Xc = -B / (2 * A)Yc = -C / (2 * A)r = np.sqrt((B * B + C * C - 4 * A * D) / (4 * A * A))return Xc, Yc, r

3.计算结果

圆心x坐标:14.558850728542366
圆心y坐标:11.80858513779518
圆半径:22.163390629231692

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FSM:Full Surround Monodepth from Multiple Cameras

参考代码&#xff1a;None 介绍 深度估计任务作为基础环境感知任务&#xff0c;在基础上构建的3D感知才能更加准确&#xff0c;并且泛化能力更强。单目的自监督深度估计已经有MonoDepth、ManyDepth这些经典深度估计模型了&#xff0c;而这篇文章是对多目自监督深度估计进行探…

使用云服务器和Frp(快速反向代理)框架快速部署实现内网穿透

目录 一. 背景1.1 内网穿透1.2 Frp介绍1.3 Frp配置流程 二. 云服务器配置2.1 配置安全组2.2 编写frps.ini 三. 内网主机配置3.1 编辑frpc.ini文件3.2 启动服务并配置开机自启动 四. 参考文献 一. 背景 现在有一台ubuntu云服务器&#xff0c;我想通过内网穿透将一台内网的主机当…

RocketMQ 5.1.0 源码详解 | Producer 启动流程

文章目录 初始化DefaultMQProducer实例启动流程DefaultMQProducer#startDefaultMQProducerImpl#startMQClientInstance#start启动流程总结 实例内容 初始化DefaultMQProducer实例 初始化一个 DefaultMQProducer 对象的代码如下 // 返回一个producer对象 DefaultMQProducer pr…

[SQL挖掘机] - 转换机制

一种较为有用的数据转换机制是在查询中修改列的数据类型. 通常, 当处理不同数据类型(如数字)的列时, 可使用仅对一种数据类型(如文本)有效的函数. 当修改某一列的数据类型时, 可简单地采用 column::datatype 格式. 其中, column表示为列名, datatype 表示为将列调整后的数据类型…

python多线程

目录 一.多线程的定义 A.什么是多线程&#xff1f; B.多线程如今遇到的挑战 C.总结 二.python中的多线程 A.python中的多线程底层原理&#xff1a; B.全局解释器锁导致python多线程不能实现真正的并行执行&#xff01; C.总结应用场景 三.java多线程&#xff0c;以及…

【Matlab】判断点和多面体位置关系的两种方法实现

我的主页&#xff1a; 技术邻&#xff1a;小铭的ABAQUS学习的技术邻主页博客园 : HF_SO4的主页哔哩哔哩&#xff1a;小铭的ABAQUS学习的个人空间csdn&#xff1a;qgm1702 博客园文章链接&#xff1a; https://www.cnblogs.com/aksoam/p/17590039.html 分别是向量判别法&…

Ubuntu 22.04下对无线网络作静态ip设置

内容如题所示&#xff0c;最近本人安全毕业&#xff0c;参加工作了&#xff0c;此处应有鲜花和掌声&#xff0c;哈哈哈。但新的生活总是有很多的小问题&#xff0c;坎坎坷坷&#xff0c;所以&#xff0c;我继续记录工作和学习生活中遇到的问题。 今天带我的云哥给了我一个ip&am…

Python入门【变量的作用域(全局变量和局部变量)、参数的传递、浅拷贝和深拷贝、参数的几种类型 】(十一)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

无涯教程-jQuery - wrapInner( html )方法函数

wrapInner(html)方法使用HTML结构包装每个匹配元素(包括文本节点)的内部子内容。 wrapInner( html ) - 语法 selector.wrapInner( html ) 这是此方法使用的所有参数的描述- html - 将动态创建并环绕目标的HTML字符串。 wrapInner( html ) - 示例 以下是一个简单的示例…

Jupyter Notbook无法刷新.bashrc中的环境变量

Jupyter Notbook无法刷新.bashrc中的环境变量 原因解决方法 原因 在Linux系统中&#xff0c;在.bashrc中添加环境变量后&#xff0c;打开jupyter notebook发现无法加载添加的环境变量。这是因为.bashrc只对bash起作用&#xff0c;如果使用GUI软件直接访问&#xff0c;是无法加…

51单片机:数码管和矩阵按键

目录 一:动态数码管模块 1:介绍 2:共阴极和共阳极 A:共阴极 B:共阳极 C:转化表 3:74HC138译码器 4:74HC138译码器控制动态数码管 5:数码管显示完整代码 二:矩阵按键模块 1:介绍 2:原理图 3:矩阵按键代码 一:动态数码管模块 1:介绍 LED数码管&#xff1a;数码管是一种…

NLP实践——Llama-2 多轮对话prompt构建

NLP实践——Llama-2 多轮对话prompt构建 1. 问题提出2. prompt的正确形式3. 效果测试4. 结尾 1. 问题提出 最近&#xff0c;META开源了Llama-2模型&#xff0c;受到了广泛的关注和好评&#xff0c;然而&#xff0c;在官方给的使用说明中&#xff0c;并没有对使用方法进行特别细…

Verilog语法学习——LV10_使用函数实现数据大小端转换

LV10_使用函数实现数据大小端转换 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 描述 在数字芯片设计中&#xff0c;经常把实现特定功能的模块编写成函数&…

ES自定义分词,对数字进行分词

需求&#xff1a;需要将下面类似的数据分词为&#xff1a;GB,T,32403,1,2015 "text": "GB/T 32403.1-2015"1、调研 现在用的ik分词器效果 POST _analyze {"analyzer": "ik_max_word","text": "GB/T 32403.1-2015&qu…

Java 反射

反射 Java 的反射&#xff08; reflection &#xff09;机制是指在程序的运行状态中&#xff0c;可以构造任意一个类的对象&#xff0c;可以了解任意一个对象所属的类&#xff0c;可以了解任意一个类的成员变量和方法&#xff0c;可以调用任意一个对象的属性和方法。这种动态获…

一.安装k8s环境

1.初始操作 默认3台服务器都执行 # 关闭防火墙 systemctl stop firewalld systemctl disable firewalld# 关闭selinux sed -i s/enforcing/disabled/ /etc/selinux/config # 永久 setenforce 0 # 临时# 关闭swap swapoff -a # 临时 sed -ri s/.*swap.*/#&/ /etc/fstab…

QT--day3(定时器事件、对话框)

头文件代码&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimerEvent> //定时器事件处理时间头文件 #include <QTime> //时间类 #include <QtTextToSpeech> #include <QPushButton> #include <QLabel&g…

【数据结构】实验六:队列

实验六 队列 一、实验目的与要求 1&#xff09;熟悉C/C语言&#xff08;或其他编程语言&#xff09;的集成开发环境&#xff1b; 2&#xff09;通过本实验加深对队列的理解&#xff0c;熟悉基本操作&#xff1b; 3&#xff09; 结合具体的问题分析算法时间复杂度。 二、…

ubuntu23.04 flush DNS caches

如何在Ubuntu 23.04中刷新DNS缓存 现在&#xff0c;如果你运行的是Ubuntu 23.04&#xff0c;"系统解决 "的方法将不再适用于你。让我们检查一下你目前的缓存大小。打开你的Ubuntu终端&#xff0c;运行以下command&#xff1a; resolvectl statistics现在&#xff0c…

mysql主从同步怎么跳过错误

今天介绍两种mysql主从同步跳过错误的方法&#xff1a; 一、两种方法介绍 1、跳过指定数量的事务&#xff1a; mysql>slave stop; mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER 1 #跳过一个事务 mysql>slave start2、修改mysql的配置文件&#xff0c;通过slav…