【数学】有效的正方形 勾股定理
生活随笔
收集整理的這篇文章主要介紹了
【数学】有效的正方形 勾股定理
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目描述
在一個(gè)二維空間中,給定四個(gè)點(diǎn)分別用p1、p2、p3、p4表示,如果這四個(gè)點(diǎn)能構(gòu)成一個(gè)正方形則返回true,否則返回false。
示例1:
輸入:p1=[0,0], p2=[1,1], p3=[1,0], p4=[0,1]
輸出:true
解題思路
這道題考察的是如何在二維空間計(jì)算邊長(zhǎng)和判斷是否是直角;
下面是解題思路:
代碼實(shí)現(xiàn)
class Solution {public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {// 有2個(gè)相等 和 4個(gè)相等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}));} }總結(jié)
這道題就是一個(gè)數(shù)學(xué)問(wèn)題的考察,核心是想清楚如何計(jì)算邊長(zhǎng),如果判斷是否是直角;最終從4個(gè)點(diǎn)中,求出6條線段,根據(jù)6條線段找出4條邊和2條對(duì)角線,最終來(lái)判斷是否是一個(gè)正方形。
總結(jié)
以上是生活随笔為你收集整理的【数学】有效的正方形 勾股定理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《增长黑客》节选与笔记
- 下一篇: 系统分析师真题__专项:计算机系统与配置