我是算的所有点距离,然后判断对角线和边长分别相同。
当然也有人是勾股定理,都可以解决。最关键的是两点之间距离公式,解析几何要学一点呀,哈哈哈。
考虑到的问题有:
①不能光考虑对角线,因为有梯形,不能光考虑边长相同,因为有平行四边形。不能光考虑都相同,因为有点。
②还有两点距离公式为 根号下 (x1-x2)^2 +(y1-y2)^2 由于,开根号会出现浮点数,不准确,就直接没开,算的距离。
③还有需要排序一下,在进行两两对比。
<?php $p1 = [0, 2]; $p2 = [0, 0]; $p3 = [2, 2]; $p4 = [2, 0]; if($p1 == $p2){ echo "四个点同一坐标,不能组成矩形"; die; } //放在数组中 $fourP = [$p1, $p2, $p3, $p4]; $count = count($fourP); for ($i = 0; $i < $count - 1; $i++) { for ($j = $i + 1; $j < $count; $j++) { $returnA[] = [$fourP[$i], $fourP[$j]]; } } //计算每个两点之间距离 foreach ($returnA as $v) { //因为开平方会出现浮点数,就不开了 $distance[] = (pow($v[0][0] - $v[1][0], 2) + pow(($v[0][1] - $v[1][1]), 2)); } //如果这些点距离中,两两相比都相同,则为矩形。这里也可以换成勾股定理,就不写代码了,因为网上大部分是勾股定理 sort($distance); if ($distance[0] == $distance[1] and $distance[2] == $distance[3] and ($distance[4] == $distance[5])) { echo '可以组成矩形,边长分别为' . sqrt($distance[0]) . ' ' . sqrt($distance[2]); } else { echo '不可以组成矩形'; };