给你四个坐标点, 判断它们能否组成一个矩形,
例如, 判断([0,0], [0,1], [1,1], [1,0])四个坐标点能否组成一个矩形
1. 任意两点间距离为边长, 列出所有边长并放入一个数组中, 对该数组去重, 数组中应该只有3个元素(长方形)或2个元素(正方形)
2. 判断数组里面的元素是否满足勾股定理
<?php
/**
* 判断四个坐标点能否组成一个矩形
*
* @param $point1
* @param $point2
* @param $point3
* @param $point4
* @return bool
*/
function isRectangle($point1, $point2, $point3, $point4)
{
// 检查参数
if ($point1 == $point2 || $point1 == $point3 || $point1 == $point4 || $point2 == $point3 || $point2 == $point4 || $point3 == $point4) {
return false;
}
// 将任意两个坐标点之间距离的平方存入到一个数组中
$lengthSquareArr = [];
$lengthSquareArr[] = getLengthSquare($point1, $point2);
$lengthSquareArr[] = getLengthSquare($point1, $point3);
$lengthSquareArr[] = getLengthSquare($point1, $point4);
$lengthSquareArr[] = getLengthSquare($point2, $point3);
$lengthSquareArr[] = getLengthSquare($point2, $point4);
$lengthSquareArr[] = getLengthSquare($point3, $point4);
// 数组去重
$lengthSquareArr = array_unique($lengthSquareArr);
$count = count($lengthSquareArr);
if ($count == 2 || $count == 3) {
// 判断是不是正方形
if ($count == 2) {
// 勾股定理
return (max($lengthSquareArr) == 2 * min($lengthSquareArr));
}
// 判断是不是长方形
else {
$maxLengthSquare = max($lengthSquareArr);
$minLengthSquare = min($lengthSquareArr);
$otherLengthSquare = array_diff($lengthSquareArr, [$maxLengthSquare, $minLengthSquare]);
// 勾股定理
return $minLengthSquare + $otherLengthSquare == $maxLengthSquare;
}
} else {
return false;
}
}
/**
* 计算两个坐标点之间距离的平方
*
* @param $point1
* @param $point2
* @return float|int
*/
function getLengthSquare($point1, $point2)
{
return pow($point1[0] - $point2[0], 2) + pow($point1[1] - $point2[1], 2);
}
// 测试
var_dump(isRectangle([0,0],[0,1],[1,1],[1,0]));