四点共圆的判定

2024-03-17 00:08
文章标签 判定 四点 共圆

本文主要是介绍四点共圆的判定,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目来源:NEFU OJ-2248&
湖南大学2020届ACM新生赛(同步赛) F

OP

此题不难,只不过推导比较闹心,多推几遍就AC了。

思路

判断四点共圆,特殊方法是对角互补,但是由于此题中未强调顺序,判断对角有一定的难度。故采用更通用的方法:

设四点为A,B,C,D(顺序无关)
先任取三点A、B、C
当A、B、C 不共线时:

\首先通过AB、AC的中垂线交点确定距此三点距离相等的点,并假定其为圆心;
\再计算半径,并与第四点到假定圆心的距离进行比较,从而判断第四点是否共圆。

当A、B、C 共线时:

\显然没有圆满足与一条直线有三个交点,故四点不共圆。
在这里插入图片描述

具体实现上,可以通过中学的平面几何知识构造中垂线方程,解假定圆心,只不过推导较为繁琐。

代码

#include <bits/stdc++.h>
using namespace std;int main()
{double x[4],y[4],xo,yo,down;int t,i,j;cin>>t;while(t--){for(i=0; i<4; i++)cin>>x[i]>>y[i];down=(x[2]-x[0])*(y[0]-y[1])-(x[1]-x[0])*(y[0]-y[2]);down*=-1;if(fabs(down)<=1e-10)printf("no\n");//判断三点共线else{xo=(x[0]*x[0]-x[2]*x[2])*(y[0]-y[1])/2-(x[0]*x[0]-x[1]*x[1])*(y[0]-y[2])/2+(y[0]-y[2])*(y[0]-y[1])*(y[2]-y[1])/2;xo/=down;yo=(x[1]-x[0])/2*(-(x[0]*x[0]-x[2]*x[2])-(y[0]*y[0]-y[2]*y[2]))-(x[2]-x[0])/2*(-(x[0]*x[0]-x[1]*x[1])-(y[0]*y[0]-y[1]*y[1]));yo/=down;yo*=-1;//printf("%lf %lf\n",xo,yo);if(fabs((x[0]-xo)*(x[0]-xo)+(y[0]-yo)*(y[0]-yo)-(x[3]-xo)*(x[3]-xo)-(y[3]-yo)*(y[3]-yo))<=1e-10)printf("yes\n");else printf("no\n");}}return 0;
}

ED

此种方法也可以拓展为判断n点共圆;

推 导 时 注 意 正 负 号 !

这篇关于四点共圆的判定的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/817189

相关文章

poj 1127 线段相交的判定

题意: 有n根木棍,每根的端点坐标分别是 px, py, qx, qy。 判断每对木棍是否相连,当他们之间有公共点时,就认为他们相连。 并且通过相连的木棍相连的木棍也是相连的。 解析: 线段相交的判定。 首先,模板中的线段相交是不判端点的,所以要加一个端点在直线上的判定; 然后,端点在直线上的判定这个函数是不判定两个端点是同一个端点的情况的,所以要加是否端点相等的判断。 最后

51NOD1265(四点共面)

题目链接:点击打开链接 解题思路:   判断四点共面,先求出三点构成的平面的法向量(叉积),如果第四个点和前三点任意一点构成的向量与平面法向量垂直(点积为0),则四点共面.    回忆下叉积和点积.对于三位空间向量,叉积公式为 =( ), =( ), a× b=( - ) i+( - ) j+(

Hessian矩阵判定极值之MATLAB实现符号解

By WC 1.9 .2015 1.Hessian矩阵 其定义如下: 如果函数f在D区域内二阶连续可导,那么黑塞矩阵H(f) 在 D 内为对称矩阵。原因是:如果函数f连续,则二阶偏导数的求

素数判定和分解质素数

1.素数判定   public static boolean isPrime(int n) {if (n <= 1) return false;if (n == 2) return true;if (n % 2 == 0) return false;int limit = (int)Math.sqrt(n) + 1;for (int i = 3; i <= limit; i += 2) {i

【编程基础C++】素数判定、最小公倍数与最大公因数的实现方法

文章目录 素数法一法二 最大公因数辗转相除法另一写法 最小公倍数直接枚举法根据GCD算LCM 素数 素数 是指大于1的自然数,且只能被1和自身整除。例如,2、3、5和7都是素数。它们在数学中非常重要,因为任何大于1的自然数都可以唯一地表示为素数的乘积,这被称为素数分解。 法一 #include <iostream>using namespace std;bool IsPr

建模杂谈系列253 序列突变点的判定

说明 使用pycm3进行推断。 内容 1 环境搭建 使用conda创建对应的包环境,然后再通过jupyter运行 conda create -c conda-forge -n pymc_env "pymc>=5"conda activate pymc_envpip3 install ipython -i https://mirrors.cloud.tencent.com/pypi/s

JVM垃圾判定算法

垃圾收集技术是Java的一堵高墙。Java堆内存中存放着几乎所有的对象实例,垃圾收集器在对堆内存进行回收前,第一件事情就是要确定这些对象中哪些还存活,哪些已经死去(即不可能再被任何途径使用的对象)。也就是判定垃圾。通常有两种方法: 引用计数法 引用计数法(Reference Counting)的算法是:给每个对象添加一个引用计数器,有一个引用,计数器值加1;当引用失效,计数器值减1;任何时刻计

面试官问:一致性哈希算法是什么?怎么判定哈希算法的好坏?

点击上方“朱小厮的博客”,选择“设为星标”后台回复"书",获取后台回复“k8s”,可领取k8s资料 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。 一致性hash算法提

jupyter 笔记本中如何判定bash块是否执行完毕

jupyter notebook中 后台执行bash卡住解决 jupyter版本 !jupyter --version Selected Jupyter core packages...IPython : 8.27.0ipykernel : 6.29.5ipywidgets : 8.1.5jupyter_client : 8.6.2j

【大数据算法】时间亚线性算法之:串相等判定算法。

串相等判定算法 1、引言2、串相等判定算法2.1 定义2.2 核心原理2.3 应用场景2.4 算法公式2.4.1 Rabin-Karp算法2.4.2 哈希函数 2.5 代码示例 3、总结 1、引言 小屌丝:鱼哥, 啥是串相等判定算法啊 小鱼:这个… en…en… 小屌丝:咋了,这个问题难住你了? 不能吧 小鱼:难住了,难住了, 我现在饿的迷糊了。 小屌丝:我~ 这个真是的。 这时