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

article/2025/11/6 22:35:34
三角形的外接圆圆心是任意两边的垂直平分线的交点。 三角形外接圆圆心叫外心。
        /// <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 inside the circumcircle/// </remarks>/// <param name="p">Point to check</param>/// <param name="p1">First point on circle</param>/// <param name="p2">Second point on circle</param>/// <param name="p3">Third point on circle</param>/// <returns>true if p is inside circle</returns>private static bool InCircle(Geometry.Point p, Geometry.Point p1, Geometry.Point p2, Geometry.Point p3){//Return TRUE if the point (xp,yp) lies inside the circumcircle//made up by points (x1,y1) (x2,y2) (x3,y3)//NOTE: A point on the edge is inside the circumcircle// 确定三个点是否组成三角形,三点共线则不构成圆if (System.Math.Abs(p1.Y - p2.Y) < double.Epsilon && System.Math.Abs(p2.Y - p3.Y) < double.Epsilon){//INCIRCUM - F - Points are coincident !!return false;}double m1, m2;double mx1, mx2;double my1, my2;double xc, yc;if (System.Math.Abs(p2.Y - p1.Y) < double.Epsilon){//计算边P2P3的垂直平分线的斜率m2 = -(p3.X - p2.X) / (p3.Y - p2.Y);//计算边P2P3的中点mx2 = (p2.X + p3.X) * 0.5;my2 = (p2.Y + p3.Y) * 0.5;//Calculate CircumCircle center (xc,yc)xc = (p2.X + p1.X) * 0.5;// 边P2P3与P1P2边的垂直平分线联立计算交点// y=xc 与 y=m2(x-mx2)+my2 联立得yc = m2 * (xc - mx2) + my2;}else if (System.Math.Abs(p3.Y - p2.Y) < double.Epsilon){//计算边P1P2的垂直平分线的斜率m1 = -(p2.X - p1.X) / (p2.Y - p1.Y);//计算边P1P2的中点mx1 = (p1.X + p2.X) * 0.5;my1 = (p1.Y + p2.Y) * 0.5;//Calculate CircumCircle center (xc,yc)// 边P2P3与P1P2边的垂直平分线联立计算交点// y=xc 与 y=m1(x-mx1)+my1 联立得xc = (p3.X + p2.X) * 0.5;yc = m1 * (xc - mx1) + my1;}else{   //计算边P1P2和P2P3的垂直平分线的斜率m1 = -(p2.X - p1.X) / (p2.Y - p1.Y);m2 = -(p3.X - p2.X) / (p3.Y - p2.Y);//计算边P1P2和P2P3的中点mx1 = (p1.X + p2.X) * 0.5;mx2 = (p2.X + p3.X) * 0.5;my1 = (p1.Y + p2.Y) * 0.5;my2 = (p2.Y + p3.Y) * 0.5;//Calculate CircumCircle center (xc,yc)// y=m1*(x-mx1)+my1 与 y=m2*(x-mx2)+my2 联立xc = (m1 * mx1 - m2 * mx2 + my2 - my1) / (m1 - m2);yc = m1 * (xc - mx1) + my1;}//计算圆的半径double dx = p2.X - xc;double dy = p2.Y - yc;double rsqr = dx * dx + dy * dy;//double r = Math.Sqrt(rsqr); //Circumcircle radius//计算点到圆心的距离dx = p.X - xc;dy = p.Y - yc;double drsqr = dx * dx + dy * dy;//判断点到圆心的距离是否小于圆的半径return (drsqr <= rsqr);}

判断一个点是否位于圆内(圆由三个圆上的点确定)。

 

 

思路:

1. 圆上任意三个点不共线。

2. 圆上三个点构成的三角形的垂直平分线交于圆心,即三角形的外接圆。 

3. 直线方程的点斜式,y=k(x-x1)+y1。

4. 斜率的计算要考虑垂直于y轴的情况,即y1=y2的情况。

 


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

相关文章

三个点确定一个圆

首先假设圆心为(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…

java动态规划求最大子段和_动态规划-最大子段和

2018-01-14 21:14:58 一、最大子段和问题 问题描述&#xff1a;给定n个整数(可能有负数)组成的序列a1&#xff0c;a2&#xff0c;...&#xff0c;an&#xff0c;求该序列的最大子段和。如果所有整数都是负数&#xff0c;那么定义其最大子段和为0。 方法一、最大子段和的简单算法…

四种方法求解最大子段和问题

题目描述 给定一段长度为n的序列&#xff0c;我们需要找到其中一个连续的子段&#xff0c;使这个子段中各个元素加和最大&#xff0c;如果这个数组中全为负整数&#xff0c;我们就定义这个子段和为0. 题目分析 首先我们的目的是找一个局部的子段但加和是全局最大&#xff0c;…

最大子段和问题(分治法和动态规划)

什么是最大子段和&#xff0c;通俗点讲&#xff1a; 最大子段和就是给了一些数&#xff0c;然后你从中找了几个连续的数&#xff0c;这组连续的数的和比任意一组连续的数的和都大&#xff0c;那么你找的这几个连续的数的和就是这些数的最大子段和。 通俗的听不懂你就看这里&am…

最大子段求和

3种算法&#xff1a;最大子段求和 一、问题分析 问题&#xff1a;给定有n个整数(可能为负整数)组成的序列 a 1 , a 2 , . . . , a n , a_1,a_2,...,a_n, a1​,a2​,...,an​,求该序列连续的子段和的最大值。 如果该子段的所有元素和是负整数时定义其最大子段和为0。 简易算法…