当前位置: 首页 > news >正文

JavaScript 检查给定的四个点是否形成正方形(Check if given four points form a square)

 给定平面上四个点的坐标,判断这四个点是否形成正方形。 

例子:

输入: p1 = { 20, 10 }, p2 = { 10, 20 }, p3 = { 20, 20 }, p4 = { 10, 10 }

输出:是

解释: 

输入: p1 = { 20, 20 }, p2 = { 10, 20 }, p3 = { 20, 20 }, p4 = { 10, 10 }

输出: 否 

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。 

要判断正方形是否为正方形,我们需要检查以下几点。
a ) 由点构成的四条边是否相等。
b ) 任意两条边之间的夹角为 90 度。(此条件是必需的,因为菱形的边也相同。)
c ) 检查两条对角线的距离是否相等

思路是选取任意一点,计算它与其他点的距离。设选取的点为 p。为了构成正方形,两个点到 p 的距离必须相等,设该距离为 d。其中一个点到 p 的距离必须不同于 d,并且必须等于 √2 乘以 d(或者距离平方等于 2 * d ²)。设这个距离不同的点为 q。 

上述条件不够好,因为距离不同的点可能位于另一侧。我们还需要检查 q 与另外两点的距离是否相同,并且该距离是否与 d 相同。

在下面的代码中,为了简单起见,我们将距离计算为 (x1-x2)² + (y1-y2)²。我们不会对其进行平方根运算!

示例代码:

// JavaScript program to check if four given points form a square or not.

// A utility function to find square of distance
// from point 'p' to point 'q'
function distSq( p, 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
function isSquare(p1,  p2,  p3, p4){
    let d2 = distSq(p1, p2); // from p1 to p2
    let d3 = distSq(p1, p3); // from p1 to p3
    let 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 program to test above function
let p1 = { x:20, y:10 }
let p2 = { x:10, y:20 }
let p3 = { x:20, y:20 }
let p4 = { x:10, y:10 }
isSquare(p1, p2, p3, p4) ? console.log("Yes") : console.log("No");

输出:

Yes

时间复杂度: O(1),所有操作均在 O(1) 常数时间内完成。

辅助空间: O(1),无需额外空间。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

http://www.lryc.cn/news/626294.html

相关文章:

  • [特殊字符] 小豆包 API 聚合平台:让 AI 接入更简单、更高效
  • PyTorch API 7
  • Linux 文件系统权限管理(补充)
  • pinctrl和gpio子系统实验
  • 前后端联合实现文件上传,实现 SQL Server image 类型文件上传
  • LeetCode热题100--101. 对称二叉树--简单
  • 【Kafka】常见简单八股总结
  • 力扣 30 天 JavaScript 挑战 第36天 第8题笔记 深入了解reduce,this
  • Linux Shell 常用操作与脚本示例详解
  • CNN 在故障诊断中的应用:原理、案例与优势
  • DAY 50 预训练模型+CBAM模块
  • 排查Redis数据倾斜引发的性能瓶颈
  • VScode ROS文件相关配置
  • 什么是大数据平台?大数据平台和数据中台有什么关系?
  • 网络间的通用语言TCP/IP-网络中的通用规则3
  • A股大盘数据-20250819 分析
  • 【PyTorch】单对象分割项目
  • Arthas 全面使用指南:离线安装 + Docker/K8s 集成 + 集中管理
  • Python入门第11课:Python网络请求入门,使用requests库轻松获取网页数据
  • Linux的基本操作
  • 浅看架构理论(一)
  • RK3568 Linux驱动学习——Linux设备树
  • 【SQL优化案例】统计信息缺失
  • 51单片机拼接板(开发板积木)
  • oracle官网下载jdk历史版本,jdk历史版本下载
  • Pandas数据预处理中缺失值处理
  • 【数据结构】堆和二叉树详解(下)
  • JavaScript 性能优化实战:从分析到落地的全指南
  • 【Task01】:简介与环境配置(第一章1、2节)
  • 彻底清理旧版本 Docker 的痕迹