给你四个坐标点,判断它们能不能组成一个矩形,如判断([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]]));