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

目录

  • 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 np


def three_points_fit_circle(points):
    P1 = points[0]
    P2 = points[1]
    P3 = points[2]
    # 共线检查
    temp01 = P1 - P2
    temp02 = P3 - P2
    temp03 = np.cross(temp01, temp02)
    temp = (temp03 @ temp03) / (temp01 @ temp01) / (temp02 @ temp02)
    if temp < 10 ** -6:
        print('\t三点共线, 无法确定圆')
        return None
    A = 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] ** 2
    B[0, 1] = P1[1]
    B[1, 0] = P2[0] ** 2 + P2[1] ** 2
    B[1, 1] = P2[1]
    B[2, 0] = P2[0] ** 2 + P2[1] ** 2
    B[2, 1] = P3[1]

    C = np.ones((3, 3))
    C[0, 0] = P1[0] ** 2 + P1[1] ** 2
    C[0, 1] = P1[0]
    C[1, 0] = P2[0] ** 2 + P2[1] ** 2
    C[1, 1] = P2[0]
    C[2, 0] = P2[0] ** 2 + P2[1] ** 2
    C[2, 1] = P3[0]

    D = np.ones((3, 3))
    D[0, 0] = P1[0] ** 2 + P1[1] ** 2
    D[0, 1] = P1[0]
    D[0, 2] = P1[1]
    D[1, 0] = P2[0] ** 2 + P2[1] ** 2
    D[1, 1] = P2[0]
    D[1, 2] = P2[1]
    D[2, 0] = P2[0] ** 2 + P2[1] ** 2
    D[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

在这里插入图片描述

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

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

相关文章

Ubuntu-文件和目录相关命令一

&#x1f52e;linux的文件系统结构 ⛳目录结构及目录路径 &#x1f9e9;文件系统层次结构标准FHS Filesystem Hierarchy Standard(文件系统层次结构标准&#xff09; Linux是开源的软件&#xff0c;各Linux发行机构都可以按照自己的需求对文件系统进行裁剪&#xff0c;所以众多…

Python - OpenCV实现摄像头人脸识别(亲测版)

要使用Python 3和OpenCV进行摄像头人脸识别&#xff0c;您可以按照以下步骤进行操作&#xff1a; 0.安装OpenCV软件 去官网直接下载安装即可,如果是C使用OpenCV&#xff0c;需要使用编译源码并配置环境变量。 1.安装OpenCV库 在命令行中输入以下命令&#xff1a; pip inst…

渗透测试基础知识(1)

渗透基础知识一 一、Web架构1、了解Web2、Web技术架构3、Web客户端技术4、Web服务端组成5、动态网站工作过程6、后端存储 二、HTTP协议1、HTTP协议解析2、HTTP协议3、http1.1与http2.0的区别4、HTTP协议 三、HTTP请求1、发起HTTP请求2、HTTP响应与请求-HTTP请求3、HTTP响应与请…

具有电动驱动的四足机器人模型研究(SimulinkMatlab代码)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

[NLP]LLM高效微调(PEFT)--LoRA

LoRA 背景 神经网络包含很多全连接层&#xff0c;其借助于矩阵乘法得以实现&#xff0c;然而&#xff0c;很多全连接层的权重矩阵都是满秩的。当针对特定任务进行微调后&#xff0c;模型中权重矩阵其实具有很低的本征秩&#xff08;intrinsic rank&#xff09;&#xff0c;因…

ajax axios json

目录 一、ajax概述 1. 概念 2. 实现方式 &#xff08;1&#xff09;原生的JS实现方式&#xff08;了解&#xff09; &#xff08;2&#xff09; JQeury实现方式 二、axios 介绍 三、axios使用 1. axios 发送get/post请求 2. axios验证用户名称是否存在 四、json 1. …

2023牛客暑期多校-J-Qu‘est-ce Que C‘est?(DP)

题意&#xff1a; 给定长度为n的数列,要求每个数都在的范围&#xff0c;且任意长度大于等于2的区间和都大于等于0&#xff0c;问方案数。。 思路&#xff1a; 首先要看出是dp题&#xff0c;用来表示遍历到第i位且后缀和最小为x的可行方案数&#xff08;此时的后缀可以只有最…

[golang gin框架] 42.Gin商城项目-微服务实战之后台Rbac微服务角色增删改查微服务

一.重构后台Rbac用户登录微服务功能 上一节讲解了后台Rbac微服务用户登录功能以及Gorm数据库配置单独抽离&#xff0c;Consul配置单独抽离&#xff0c;这一节讲解后台Rbac微服务角色增删改查微服务功能&#xff0c;Rbac微服务角色增删改查微服务和后台Rbac用户登录微服务是属于…

苍穹外卖day09——历史订单模块(用户端)+订单管理模块(管理端)

查询历史订单——需求分析与设计 产品原型 业务规则 分页查询历史订单 可以根据订单状态查询 展示订单数据时&#xff0c;需要展示的数据包括&#xff1a;下单时间、订单状态、订单金额、订单明细&#xff08;商品名称、图片&#xff09; 接口设计 查询历史订单——代码开…

AI聊天GPT三步上篮!

1、是什么&#xff1f; CHATGPT是OpenAI开发的基于GPT&#xff08;Generative Pre-trained Transformer&#xff09;架构的聊天型人工智能模型。也就是你问它答&#xff0c;根据网络抓去训练 2、怎么用&#xff1f; 清晰表达自己诉求&#xff0c;因为它就是一个AI助手&#…

Java书签 #解锁MyBatis的4种批量插入方式及ID返回姿势

1. 今日书签 项目开发中&#xff0c;我们经常会用到单条插入和批量插入。但是实际情况可能是&#xff0c;项目初期由于种种原因&#xff0c;在业务各处直接使用单条插入SQL进行开发&#xff08;未开启批处理&#xff09;&#xff0c;在后面的迭代中&#xff0c;系统性能问题渐…

无涯教程-jQuery - Ajax Tutorial函数

AJAX是用于创建交互式Web应用程序的Web开发技术。如果您了解JavaScript,HTML,CSS和XML,则只需花费一个小时即可开始使用AJAX。 为什么要学习Ajax? AJAX代表 A 同步 Ja vaScript和 X ML。 AJAX是一项新技术,可借助XML,HTML,CSS和Java Script创建更好,更快,更具交互性的Web应用…

解决Font family [‘sans-serif’] not found问题

序言 以下测试环境都是在 anaconda3 虚拟环境下执行。 激活虚拟环境 conda activate test_python_env 或 source activate test_python_env工具&#xff1a; WinSCP Visual Studio Code 这里笔者使用 WinSCP 工具连接&#xff0c;编辑工具是 Visual Studio Code 一、字体…

基于fpga_EP4CE6F17C8实现的呼吸灯

文章目录 前言实验手册&#xff08;EP4CE6F17C8&#xff09;一、实验目的二、实验原理理论原理 三、系统架构设计四、模块说明1&#xff0e;模块端口信号列表2&#xff0e;状态转移图3&#xff0e;时序图 五、仿真波形图六、引脚分配七、代码实现八、仿真代码九、板级验证效果 …

【论文阅读】Feature Inference Attack on Shapley Values

摘要 研究背景 近年来&#xff0c;解释性机器学习逐渐成为一个热门的研究领域。解释性机器学习可以帮助我们理解机器学习模型是如何进行预测的&#xff0c;它可以提高模型的可信度和可解释性。Shapley值是一种解释机器学习模型预测结果的方法&#xff0c;它可以计算每个特征对…

视频标注是什么?和图像数据标注的区别?

视频数据标注是对视频剪辑进行标注的过程。进行标注后的视频数据将作为训练数据集用于训练深度学习和机器学习模型。这些预先训练的神经网络之后会被用于计算机视觉领域。 自动化视频标注对训练AI模型有哪些优势 与图像数据标注类似&#xff0c;视频标注是教计算机识别对象…

springboot整合myabtis+mysql

一、pom.xml <!--mysql驱动包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--springboot与JDBC整合包--><dependency><groupId>org.springframework.b…

hcip——路由策略

要求&#xff1a; 基础配置 AR1 [R1]int g 0/0/0 [R1-GigabitEthernet0/0/0]ip add 12.0.0.1 24[R1-GigabitEthernet0/0/0]int g 0/0/1 [R1-GigabitEthernet0/0/1]ip add 14.0.0.1 24[R1]int loop0 [R1-LoopBack0]ip add 1.1.1.1 24[R1]rip 1 [R1-rip-1]vers 2 [R1-rip-1]net…

基于扩展(EKF)和无迹卡尔曼滤波(UKF)的电力系统动态状态估计(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

k8s中强制删除pv

K8s 集群内有一个已经不再使用的 PV&#xff0c;虽然已经删除了与其关联的 Pod 及 PVC&#xff0c;并对其执行了删除命令&#xff0c;但仍无法正常删除&#xff0c;一直处于 Terminating 状态&#xff1a; 解决办法&#xff1a; 1. 获取pv信息 kubectl get pv 2. 解除pv锁定 …