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

我是算的所有点距离,然后判断对角线和边长分别相同。

当然也有人是勾股定理,都可以解决。最关键的是两点之间距离公式,解析几何要学一点呀,哈哈哈。

考虑到的问题有:

①不能光考虑对角线,因为有梯形,不能光考虑边长相同,因为有平行四边形。不能光考虑都相同,因为有点。

②还有两点距离公式为  根号下 (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 '不可以组成矩形';
    };

猜你喜欢

转载自blog.csdn.net/wuye_lh/article/details/107068479