给你四个坐标点,判断它们能不能组成一个矩形,如判断([0,0],[0,1],[1,1],[1,0])能组成一个矩形(面试题)

给你四个坐标点,判断它们能不能组成一个矩形,如判断([0,0],[0,1],[1,1],[1,0])能组成一个矩形。

我们分析这道题, 给4个标点,判断是否矩形

高中知识,矩形有4条边,两两相等, 矩形两条对角线相等, 矩形的长短边与对角线满足勾股定理。

故解题思路为,根据坐标点,

  列出所有的两点组合边长的数组,去重,看是不是只剩 3个长度(注意矩形2个长度)

  判断是否满足勾股定理

代码如下:

 1 <?php
 2 
 3 
 4 function isRectangle($arr){
 5     $lengthArr = [];
 6     $lengthArr[] = getLength([$arr[0][0], $arr[0][1]], [$arr[1][0], $arr[1][1]]);
 7     $lengthArr[] = getLength([$arr[0][0], $arr[0][1]], [$arr[2][0], $arr[2][1]]);
 8     $lengthArr[] = getLength([$arr[0][0], $arr[0][1]], [$arr[3][0], $arr[3][1]]);
 9     $lengthArr[] = getLength([$arr[1][0], $arr[1][1]], [$arr[2][0], $arr[2][1]]);
10     $lengthArr[] = getLength([$arr[1][0], $arr[1][1]], [$arr[2][0], $arr[2][1]]);
11     $lengthArr[] = getLength([$arr[2][0], $arr[2][1]], [$arr[3][0], $arr[3][1]]);
12 
13     $lengthArr = array_unique($lengthArr);
14     $lengthCount = count($lengthArr);
15     if ($lengthCount == 3 || $lengthCount == 2 ) {
16         if ($lengthCount == 2) {
17             $maxLength = max($lengthArr);
18             $minLength = min($lengthArr);
19             if ($maxLength == 2*$minLength) {
20                 return true;
21             }
22             return false;
23         } else {
24             $maxLength = max($lengthArr);
25             $minLength = min($lengthArr);
26             $otherLength = array_diff($lengthArr, [$maxLength, $minLength]);
27             if ($minLength + $otherLength == $maxLength) {
28                 return true;
29             }
30             return false;
31         }
32     } else {
33         return false;
34     }
35 }
36 
37 function getLength($arr1, $arr2){
38     $res = pow(abs($arr1[0]-$arr2[0]), 2)+pow(abs($arr1[1]-$arr2[1]), 2);
39     return $res;
40 }
41 
42 
43 var_dump(isRectangle([[0,0],[0,2],[2,2],[2,0]]));

猜你喜欢

转载自www.cnblogs.com/jwcrxs/p/8986120.html