四点判断能否围成矩形

题目:

给定4个二维坐标点

struct  Point  { double x,y;  };

判断能否围成矩形。


考点分析:

矩形的数学判断方式

程序对判断过程的模拟

double数据比较大小


现场错误:

没有考虑到斜放的矩形


解题思路:

1、任取一点作为基准点 A

2、取距离基准点最远的点作为对角点 D(a^2+b^2不开方)

3、证明另外两点的连线 BC 被对角线 AD 平分,且两对角线相等


补充1——证明对角线相等且平分的方法:

方法1:分别计算 AD 和 BC 中点,判断重合;另计算长度相等

方法2:取 AD 中点 O,计算向量 BO、OC,判断 BO = OC 且 |BO| = |OD|

(注意double数据比较大小的方法:两数相减小于最小精度 = 两数相等)

(距离计算:平方相加后直接比较,不开方,减小浮点数误差)


补充2——其他方法及评价

方法1:

角 A、B、C 都是直角,用向量相乘等于0计算。

缺点是程序有些混乱,每个点都要计算3对边是否垂直(找到垂直即可continue)

方法2:

坐标变换,取基准点 A,排除 AB、AC、AD中最长边(含相等),取基准边 AB,用坐标变换公式把“斜矩形”转换为“水平矩形”,愉快地比较新坐标值。

缺点是坐标变换公式同样有浮点数误差的问题;且在坐标点是整数的问题中,此方法不能回避浮点数运算(补充1中的中点计算,可先进行所有点坐标乘2的预处理)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值