C# 如何检查给定的四个点是否形成一个正方形
创作时间:
作者:
@小白创作中心
C# 如何检查给定的四个点是否形成一个正方形
引用
CSDN
1.
https://blog.csdn.net/hefeng_aspnet/article/details/145686008
给定平面上四个点的坐标,判断这四个点是否形成正方形。
要检查正方形,我们需要检查以下内容:
a) 由点形成的所有四条边都相同。
b) 任何两条边之间的角度都是 90 度。(此条件是必需的,因为菱形 也有相同的边)
c) 检查两条对角线的距离是否相同.
例子:
输入: p1 = { 20, 10 }, p2 = { 10, 20 }, p3 = { 20, 20 }, p4 = { 10, 10 }
输出: 是
解释:
输入: p1 = { 20, 20 }, p2 = { 10, 20 }, p3 = { 20, 20 }, p4 = { 10, 10 }
输出: 否
方法:
思路是选取任意一点并计算其与其余点的距离。设选取的点为“p”。要形成正方形,两个点与“p”的距离必须相同,设该距离为 d。与一个点的距离必须不同于 d,并且必须等于 d 的 2 倍。设距离不同的这个点为“q”。
上述条件还不够好,因为距离不同的点可能在另一侧。我们还需要检查 q 是否与其他 2 个点的距离相同,并且该距离与 d 相同。
以下是上述想法的实现:
using System;
class GFG
{
// Structure of a point in 2D space
class Point
{
public int x, y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
};
// A utility function to find square of distance
// from point 'p' to point 'q'
static int distSq(Point p, Point q)
{
return (p.x - q.x) * (p.x - q.x) + (p.y - q.y) * (p.y - q.y);
}
// This function returns true if (p1, p2, p3, p4) form a
// square, otherwise false
static bool isSquare(Point p1, Point p2, Point p3, Point p4)
{
int d2 = distSq(p1, p2); // from p1 to p2
int d3 = distSq(p1, p3); // from p1 to p3
int d4 = distSq(p1, p4); // from p1 to p4
if (d2 == 0 || d3 == 0 || d4 == 0)
return false;
// If lengths if (p1, p2) and (p1, p3) are same, then
// following conditions must met to form a square.
// 1) Square of length of (p1, p4) is same as twice
// the square of (p1, p2)
// 2) Square of length of (p2, p3) is same
// as twice the square of (p2, p4)
if (d2 == d3 && 2 * d2 == d4
&& 2 * distSq(p2, p4) == distSq(p2, p3))
{
return true;
}
// The below two cases are similar to above case
if (d3 == d4 && 2 * d3 == d2
&& 2 * distSq(p3, p2) == distSq(p3, p4))
{
return true;
}
if (d2 == d4 && 2 * d2 == d3
&& 2 * distSq(p2, p3) == distSq(p2, p4))
{
return true;
}
return false;
}
// Driver code
public static void Main(String[] args)
{
Point p1 = new Point(20, 10), p2 = new Point(10, 20),
p3 = new Point(20, 20), p4 = new Point(10, 10);
Console.WriteLine(isSquare(p1, p2, p3, p4) == true ? "Yes" : "No");
}
}
输出:
是
时间复杂度:O(1),所有操作都在 O(1) 常数时间内执行。
辅助空间:O(1),不需要额外空间
热门推荐
田馥甄妈妈回应引争议,70岁台湾老艺人方芳成两岸交流榜样
人口贩卖犯罪的打击行为与法律框架
美国国家全景解析之一:人口结构和发展趋势
心理提升:保持好心态的16个快乐心法
玫瑰痤疮患者不能吃哪些食物
甲状腺分泌什么激素?详解甲状腺激素功能与异常治疗
真实的东汉末年:乱世之痛与恐惧的深渊
北京户口的好处有哪些
经典价值投资案例参考,价值投资的成功典范解析
北人参,南桂圆!益气养血、养心安神别错过
为什么冰箱是柜子,而冰柜是箱子?
买已经出租的二手房需要注意哪些问题?
160斤的人能跳绳减肥吗?医生:这样做可能伤膝盖
决胜巅峰输出怎么选 强势输出英雄选择推荐
沙孟海先生为杭州灵隐寺书“大雄宝殿”四字的故事
巴西红耳龟的正确饲养方法(让你的新宠物健康快乐的关键)
2024年资产剥离研究报告
遭遇造谣诽谤如何维权?法律途径全解析
降本增效VS形式主义:2025年中国企业的生死突围战
如何选择适合自己的驾照类型
父母赠房妙招:如何确保子女独享房产权益?
房贷年利率计算指南:三种主流方法详解及实际应用
松骨峰大战多惨烈?敌我战损6比1,斯大林感叹:一支无敌的部队
拟募资额从36亿元降至18亿,云从科技的定增还是终止了
肠炎患者接受左氧氟沙星治疗有效吗
2024年补牙纳入医保了吗?一文详解口腔治疗医保报销政策
手机无线充电器利用了什么原理
深度学习降噪技术有助于提高短周期密集地震台阵地壳结构成像分辨率
抽血前抽烟会影响什么指标
更换固态硬盘(SSD)对电脑性能提升有多大影响?