我是算的所有点距离,然后判断对角线和边长分别相同。
当然也有人是勾股定理,都可以解决。最关键的是两点之间距离公式,解析几何要学一点呀,哈哈哈。
考虑到的问题有:
①不能光考虑对角线,因为有梯形,不能光考虑边长相同,因为有平行四边形。不能光考虑都相同,因为有点。
②还有两点距离公式为 根号下 (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 '不可以组成矩形';
};