题目描述

在一个二维空间中,给定四个点分别用p1、p2、p3、p4表示,如果这四个点能构成一个正方形则返回true,否则返回false。

示例1:

输入:p1=[0,0], p2=[1,1], p3=[1,0], p4=[0,1]

输出:true

解题思路

这道题考察的是如何在二维空间计算边长和判断是否是直角;

下面是解题思路:

  1. 一个正方形有2条相等的对角线和4条相等的边
  2. 判断是否是直角可以使用勾股定理:C*C=A*A+B*B;在正方形中A和B相等是正方形的边,而C则是对角线。
  3. 计算2个点的长度,   长度 * 长度= (y2-y1) * (y2-y1) + (x2-x1) * (x2-x1)
  4. 结合上述信息就可以做计算。

代码实现


class Solution {public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {// 有2个相等 和 4个相等Pair pair1 = new Pair(calculate(p1, p2), 1);Pair pair2 = new Pair(-1, 0);try {int p2p3 = calculate(p2, p3);extracted(pair1, pair2, p2p3);int p3p4 = calculate(p3, p4);extracted(pair1, pair2, p3p4);int p4p1 = calculate(p4, p1);extracted(pair1, pair2, p4p1);int p1p3 = calculate(p1, p3);extracted(pair1, pair2, p1p3);int p2p4 = calculate(p2, p4);extracted(pair1, pair2, p2p4);if (pair1.count == 2) {return pair1.value == 2 * pair2.value;} else if (pair1.count == 4) {return 2 * pair1.value == pair2.value;} else {return false;}} catch (Throwable e) {return false;}}private void extracted(Pair pair1, Pair pair2, int p2p3) {if (pair1.value == p2p3) {pair1.count++;} else if (pair2.value == -1 || pair2.value == p2p3) {pair2.value = p2p3;pair2.count++;} else {throw new RuntimeException();}}int calculate(int[] p1, int[] p2) {int vx = (p2[0] - p1[0]);int vy = (p2[1] - p1[1]);return vx * vx + vy * vy;}class Pair {int value = -1;int count;public Pair(int value, int count) {this.value = value;this.count = count;}}public static void main(String[] args) {Solution solution = new Solution();//[0,0]//[1,1]//[1,0]//[0,1]System.out.println(solution.validSquare(new int[]{0, 0}, new int[]{1, 0}, new int[]{1, 1}, new int[]{0, 1}));System.out.println(solution.validSquare(new int[]{0, 0}, new int[]{1, 1}, new int[]{1, 0}, new int[]{0, 1}));//[1,0]//[-1,0]//[0,1]//[0,-1]System.out.println(solution.validSquare(new int[]{1, 0}, new int[]{-1, 0}, new int[]{0, 1}, new int[]{0, -1}));//[2,2]//[2,1]//[1,2]//[1,2]System.out.println(solution.validSquare(new int[]{2, 2}, new int[]{2, 1}, new int[]{1, 2}, new int[]{1, 2}));}
}

总结

这道题就是一个数学问题的考察,核心是想清楚如何计算边长,如果判断是否是直角;最终从4个点中,求出6条线段,根据6条线段找出4条边和2条对角线,最终来判断是否是一个正方形。

【数学】有效的正方形 勾股定理相关推荐

  1. 勾股定理python思路_趣叮咚编程数学揭秘:为什么勾股定理a+b=c?

    我们都知道: 三角形3个外角之和=360度 可是谁知道为什么等于360度呢? 其实利用编程制作动图演绎了解啦: 那勾股定理a+b=c又是为什么呢? 还有很多有趣的数学公式都可以演绎: 圆的面积公式.圆 ...

  2. 如何用python制作正方形模拟器 python项目小发明 【安安教具】-【数学】-【正方形】模拟器

    正方形,是一种特殊的四边形,与矩形相比,其四个边长度均相等. 正方形的实现也会变得十分困难,我们需要考虑形状不发生变化,只改变其大小. 模拟一个正方形的大小,位置变化,就是本模拟器需要实现的功能. 其 ...

  3. C++求复数的角度_【研读.教材分析】“勾股定理”教学——基于单元整体的角度再思考...

    (西安市第八十六中学   刘丽丽) 学科教学要注重知识的"生长点"和"延伸点",把课时知识置于学科整体逻辑体系中,关注结构和通法,处理好局部与整体之间的关系.所 ...

  4. 勾股定理计算机语言,勾股定理

    [gōu gǔ dìng lǐ] 勾股定理 语音 编辑 锁定 讨论 上传视频 勾股定理,是一个基本的几何定理,指直角三角形的两条直角边的平方和等于斜边的平方.中国古代称直角三角形为勾股形,并且直角边中 ...

  5. 数学编织家和他们软软的作品

    Pat Ashforth和Steve Plummer夫妇编织和钩织数学图形已经超过二十年了. 弦理论(liString theory):几何玩具的钩织版:Pat Ashforth/Woolly Tho ...

  6. 近代数学史上的最大冤案

    十九世纪70年代,康托尔天才地严格证明了一条数学定理:正方形中的几何点与其边上的几何点的个数相等.由此,康托尔开始深入研究下去,得到一系列的推论,最终创立了集合论. 很不幸的是,康托尔创造性的发现不被 ...

  7. 【Scratch案例实操】Scratch画正方形 scratch编程案例教学 scratch创意编程 少儿编程教案

    案例名称:画正方形 学习目标: 掌握角色导入.和基本设置 掌握画笔的使用,画笔颜色.粗细以及画笔清除,通过使用抬笔和落笔绘制想要的图形 学会数学几何知识正方形及其特点 熟练掌握循环模块下的" ...

  8. 拉格朗日四平方和定理c语言,费马平方和定理 拉格朗日四平方和定理

    费马平方和定理 费马平方和定理:奇质数能表示为两个平方数之和的充分必要条件是该质数被4除余1.第一步 "如果两个整数都能表示为两个平方数之和,则它们的积也能表示为两个平方数之和." ...

  9. 北风设计模式课程---里氏替换原则(Liskov Substitution Principle)

    北风设计模式课程---里氏替换原则(Liskov Substitution Principle) 一.总结 一句话总结: 当衍生类能够完全替代它们的基类时:(Liskov Substitution P ...

最新文章

  1. mycncart 1.4.0.0 新版本发布
  2. 洛谷P1667/[10.22 模拟赛] 数列 (思维+模拟)
  3. python 用一个数组实现三个栈
  4. spring 获取cookies_springMVC操作cookie和session
  5. 电视机当计算机屏幕,电视机可以当电脑显示器吗
  6. LeetCode 1016. 子串能表示从 1 到 N 数字的二进制串(bitset)
  7. ubuntu16.04安装python.h_ubuntu16.04安装python3.6踩过的坑
  8. [转载] python无法从nltk中调取文本 from nltk.book import *
  9. Jquery ThickBox的使用
  10. 资源分享·病毒样本下载资源分享
  11. 如何调换手机桌面位置_手机桌面很乱怎么整理?简单七招让你效率更高!
  12. Unity3D游戏开发从零单排(四) - 制作一个iOS游戏
  13. BZOJ-2242 计算器 快速幂+拓展欧几里得+BSGS(数论三合一)
  14. 手动安装shipyard
  15. vue 打卡图片_掀起ins打卡潮的《小丑》台阶到底有什么魔力?
  16. 好看又实用的压缩文件管理器——Bandizip
  17. 搭建华为FusionCompute虚拟化平台(转载)
  18. 电子元器件行业SRM供应商系统加强产业链协同,保证零差错高效率
  19. mysql 漏洞 wa_[漏洞案例]thinkcmf 2.x从sql注入到getshell实战
  20. 3GPP 首个5G标准

热门文章

  1. Cpp环境【POJ3069】【Vijos2995】 萨鲁曼的大军 Saruman's Army
  2. UE5神通--POI解决方案
  3. scrapy实战----将数据存储到csv文件和MySQL数据库中
  4. 域名被封的表现域名微信不能访问该怎样处理
  5. 题解 CF38C 【Blinds】
  6. 网上计算机能力提升研修心得,信息技术应用能力提升个人研修总结
  7. Android EditText 监听回车键
  8. 【今日CV 计算机视觉论文速览 第96期】 8 Apr 2019
  9. 毕业设计 基于stm32的血压测量检测系统 - 物联网 单片机
  10. Windows扫雷游戏秘籍