由三个点的坐标确定圆和球的圆心和半径

article/2025/11/6 20:00:55

利用三个平面或者空间的点位坐标可以求出该平面圆或者球的圆心或者球心和半径

import numpy as np
from numpy.linalg import det
# 由圆上三点确定圆心和半径# INPUT
# p1   :  - 第一个点坐标, list或者array 1x3
# p2   :  - 第二个点坐标, list或者array 1x3
# p3   :  - 第三个点坐标, list或者array 1x3
# 若输入1x2的行向量, 末位自动补0, 变为1x3的行向量
def points2circle(p1, p2, p3):p1 = np.array(p1)p2 = np.array(p2)p3 = np.array(p3)num1 = len(p1)num2 = len(p2)num3 = len(p3)# 输入检查if (num1 == num2) and (num2 == num3):if num1 == 2:p1 = np.append(p1, 0)p2 = np.append(p2, 0)p3 = np.append(p3, 0)elif num1 != 3:print('\t仅支持二维或三维坐标输入')return Noneelse:print('\t输入坐标的维数不一致')return None# 共线检查temp01 = p1 - p2temp02 = p3 - p2temp03 = np.cross(temp01, temp02)#计算两个向量(向量数组)的叉乘。叉乘返回的数组既垂直于a,又垂直于b。# 如果a,b是向量数组,则向量在最后一维定义。该维度可以为2,也可以为3. 为2的时候会自动将第三个分量视作0补充进去计算。temp = (temp03 @ temp03) / (temp01 @ temp01) / (temp02 @ temp02)  # @装饰器的格式来写的目的就是为了书写简单方便# temp03 @ temp03中的@ 含义是数组中每个元素的平方之和if temp < 10**-6:print('\t三点共线, 无法确定圆')return Nonetemp1 = np.vstack((p1, p2, p3))  # 行拼接temp2 = np.ones(3).reshape(3, 1)  # 以a行b列的数组形式显示mat1 = np.hstack((temp1, temp2))  # size = 3x4m = +det(mat1[:, 1:])n = -det(np.delete(mat1, 1, axis=1))  # axis=1相对于把每一行当做列来排列p = +det(np.delete(mat1, 2, axis=1))q = -det(temp1)temp3 = np.array([p1 @ p1, p2 @ p2, p3 @ p3]).reshape(3, 1)temp4 = np.hstack((temp3, mat1))# 使用 stack,可以将一个列表转换为一个numpy数组,当axis=0的时候,和 使用 np.array() 没有什么区别,# 但是当 axis=1的时候,那么就是对每一行进行在列方向上进行运算,也就是列方向结合,# 此时矩阵的维度也从(2,3)变成了(3,2)# hstack(tup) ,参数tup可以是元组,列表,或者numpy数组,返回结果为numpy的数组temp5 = np.array([2 * q, -m, -n, -p, 0])mat2 = np.vstack((temp4, temp5))  # size = 4x5A = +det(mat2[:, 1:])B = -det(np.delete(mat2, 1, axis=1))C = +det(np.delete(mat2, 2, axis=1))D = -det(np.delete(mat2, 3, axis=1))E = +det(mat2[:, :-1])pc = -np.array([B, C, D]) / 2 / Ar = np.sqrt(B * B + C * C + D * D - 4 * A * E) / 2 / abs(A)return pc, r# pc   :  - 圆心坐标, array 1x3# r    :  - 半径, 标量pc2, r2 = points2circle([1, 2, -1], [-2, 1, 2], [0, -3, -3])
print(pc2, r2)
# 调用示例1 - 平面上三个点
# pc1, r1 = points2circle([1, 2], [-2, 1], [0, -3])
# 调用示例2 - 空间中三个点
# pc2, r2 = points2circle([1, 2, -1], [-2, 1, 2], [0, -3, -3])

 运行结果如下:

文中有部分内容参考了 http://t.csdn.cn/ec8Ke

大家想了解更多详细的知识可以参考:http://t.csdn.cn/ec8Ke


http://chatgpt.dhexx.cn/article/PHF7W4RY.shtml

相关文章

三个点坐标求解一个圆

clear all; clc; close all; %已知随bai便三点&#xff0c;不在同一条du直线上zhi的三点确定一个圆&#xff1f; A1[0 0.05]; A2[0.01 0.06]; A3[0 0.07]; %求圆心坐dao标zhuan A[A1-A2;A2-A3]; B([sum(A1.^2-A2.^2); sum(A2.^2-A3.^2)])/2; if det(A)~0 O(A\B);%O[x y]是圆心坐…

三点确定圆的半径_51CAE_新浪博客

近日通过CAE软件分析弹性体折叠过程中的半径变化趋势&#xff0c;已经从分析结果文件中提取了弯折区域三点的运动轨迹&#xff0c;设想将弯折区域近似为圆弧并通过三点计算得出圆的半径。经网上查找一翻&#xff0c;发现一篇博客有比较详细的计算公式&#xff0c;由于不能直接转…

圆弧方向判断方法和三点确定一个圆的计算方法

圆弧方向判断方法设p1(x1,y1) p2(x2,y2) p3(x3,y3) 求向量 p12(x2-x1,y2-y1) p23(x3-x2,y3-y2) 则当 p12与p23的叉乘&#xff08;向量积&#xff09; p12 x p23 (x2-x1)*(y3-y2)-(y2-y1)*(x3-x2) 为正时&#xff0c;p1-p2-p3 路径的走向为逆时针&a…

判断一个点是否在圆内(三点确定一个圆)

三角形的外接圆圆心是任意两边的垂直平分线的交点。 三角形外接圆圆心叫外心。 /// <summary>/// Returns true if the point (p) lies inside the circumcircle made up by points (p1,p2,p3)/// </summary>/// <remarks>/// NOTE: A point on the edge is …

三个点确定一个圆

首先假设圆心为(x0, y0)&#xff0c;半径为r。则这个圆可以表示为&#xff1a; (x−x0)2(y−y0)2r2​ 假设知道的三个点为(x1, y1)&#xff0c;(x2,y2)&#xff0c;(x3,y3)。那么&#xff1a; (x1−x0)2(y1−y0)2r2 (x2−x0)2(y2−y0)2r2 (x3−x0)2(y3−y0)2r2 消去 r2 后变成 …

三点确定一个圆的计算方法

最近在看recast&detour源码的时候有遇到许多数学上的算法问题&#xff0c;特此记录&#xff0c;以便以后查看。 推导过程 问题&#xff1a; 求点p1 p2 p3三点确定的圆的 圆心c 和 半径r 。 思路&#xff1a; 为了方便求解&#xff0c;将坐标系原点平移到p1点。 即新的…

三点确定一个圆(Apple HDU - 6206)(计算几何+高精度)

传送门 三点确定一个圆的计算方法 设一个圆的圆心坐标为(x0,y)&#xff0c;半径为r。那么这个圆的方程可以写成 (x-x0)^2(y-y0)^2r^2 在这个圆上随便取三个点&#xff0c;设这三个点的坐标分别为(x1,y1),(x2,y2),(x3,y3)。那么有 公式(1)(2)相减&#xff0c;(1)(3)相减经过…

与圆有关的位置关系

与圆有关的位置关系 主讲&#xff1a;黄冈中学高级教师 余国琴 知识强化 一、知识概述 1、点和圆的位置关系 如果圆的半径为r&#xff0c;已知点到圆心的距离为d&#xff0c;则可用数量关系表示位置关系&#xff0e; (1)d&#xff1e;r点在圆外&#xff1b; (2)dr点在圆上&a…

三点定圆原理与C++实现

文章目录 1 原理2 C实现 1 原理 根据我们小学二年级就学过的三点定圆定理&#xff1a; 不 共 线 的 三 个 点 可 唯 一 确 定 一 个 圆 不共线的三个点可唯一确定一个圆 不共线的三个点可唯一确定一个圆 且&#xff0c;不共线的三点相互连接必然构成一个三角形&#xff0c;这…

使用C语言实现简单的PNG图像读取

概述 首先&#xff0c;关于png图像的结构&#xff1a;PNG文件的结构、PNG格式的数据结构。这两篇文章说的比较细。我简单地说一下我使用到的地方&#xff1a; 注&#xff1a;①引于PNG格式的数据结构。②引于PNG文件的结构 “png文件的前8个字节为固定的文件头信息&#xff0…

RK3588平台开发系列讲解(Display篇)开机视频的设置

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、开机视频功能介绍二、使用方法2.1、开启与关闭2.2、视频放置位置2.3、编译结果2.4、视频素材要求2.5、参数控制说明沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍RK3588平台开机视频的使用方法…

NR PUCCH(一) PUCCH format 0/1

欢迎关注同名微信公众号“modem协议笔记”。 NR中PUCCH物理信道用来发送上行控制信息Uplink Control Information(UCI)&#xff0c;当然UCI也可以在PUSCH上发送。UCI 内容包括&#xff1a;CSI,HARQ ACK/NACK ,SR 及上述三者的组合信息。 那先看下PUCCH format &#xff0c;序…

NR PUSCH(三) 频域资源分配方式

微信公众号同步更新欢迎关注同名modem协议笔记 这篇看下频域资源分配&#xff0c;本篇内容主要在38.214 6.1.2.2 resource allocation in frequency domain章节中。 相比于R15&#xff0c;R16 频域资源分配有3种类型 Uplink resource allocation scheme type 0/1/2&#xff08…

NR PUSCH(四) Frequency hopping

微信公众号同步更新&#xff0c;欢迎关注同名modem协议笔记 上篇PUSCH 介绍了频域分配方式resource allocation type0/1/2&#xff0c;其中type 0 RBG位图的分配方式比较灵活&#xff0c;type 2对应的interlaced RB 本身就是一种频域的离散化&#xff0c;都可以实现类似的效果…

halcon中阈值分割算子用法

1.threshold(Image : Region : MinGray, MaxGray : )&#xff1a;通过给定的阈值区间对图像进行分割 效果图&#xff1a; read_image (Audi2, audi2) fill_interlace (Audi2, ImageFilled, odd) threshold (ImageFilled, Region, 0, 90) 2.binary_threshold(Image : Region : …

De-interlace 反交错 简介

<script type"text/javascript"> </script> <script type"text/javascript"> </script> 为了更好的理解新的逐行扫瞄的概念&#xff0c;必须先弄清楚电视传输的一些基本知识&#xff0c;一副图像是如何传输的&#xff0c;它与新的…

pygame加载png出现known incorrect sRGB,Interlace handling should be turned on when using png_read_image问题

使用pygame加载png出现libpng warning: iCCP: known incorrect sRGB profile和Interlace handling should be turned on when using png_read_image警告的问题 一、解决Interlace handling should be turned on when using png_read_image警告 最近使用Python实现强化学习走迷…

计算机视觉之旅(Day3)

对不起大家&#xff0c;opencv的坑我尽量在年底更完&#xff0c;C的坑已经基本更完了&#xff0c;在没有进一步深入学习C之前可能这个系列已经算完了。不多说&#xff0c;我看看机器视觉的基本内容吧。 &#xff08;一&#xff09;基本构成 传统的机器视觉系统是由待测目标、…

交错(拉丝)(Interlace) 与 反胶卷过带

第一部分——交错&#xff08;拉丝&#xff09;&#xff08;Interlace&#xff09;的产生 引用了相当多网友的分析与结论&#xff0c;恕我不能依次注明。分析主要来自“[SilkyBible] 视频知识系列”&#xff0c;就主要概念的主要影响因素进行了一点分析。如果有错误&#xff0c…

二分法之最大子段和

1.问题描述&#xff1a;给定一个数组&#xff0c;找出其中可以构成最大数的子段&#xff0c;子段和是由连续的子段构成的&#xff1b;给定有n个整数(可能为负整数)组成的序列a1,a2,...,an,求该序列连续的子段和的最大值。 2.设计思路&#xff1a;对于一个连续的子段和&#xf…