给四条线段,判断是否是矩形

该博客介绍了如何通过C++解决一个编程问题,即根据输入的坐标判断四条线段是否能形成一个矩形。博主详细阐述了思路,包括数据结构设计、判断线段首尾相连、平行和垂直关系的检查,以及线段长度验证。虽然在VS中调试遇到困难,但博主的代码通过了三个给定的测试用例。
摘要由CSDN通过智能技术生成

今天又做了一个题目,这个感觉比昨天的复杂一些,代码量都多了一些。

题目是这样的,要求输入一系列点坐标,一共输入16个整型,两个两个一对,就是8个坐标,再两个两个一对,就是4条线段,判断这4条线段,是否围成一个矩形。

想了下,大概分为如下几个步骤来做:
1. 获取输入,组织数据结构,怎么存储这些点,这些线段。
2. 然后就是怎么判断矩形。

怎么判断矩形?我又分为下面几个步骤来考虑:
1. 先判断四条线段是否首尾相连在一起。可以判定图形是否是封闭图形。
2. 四条线段中对于任意一条线段与其非相邻线段是否平行。做两次平行判断,可以判定为平行四边形。
3. 在平行四边形的基础上,判断任意两条相邻的线段是否垂直。有垂直就是直角了,也就是矩形。
4. 判断每一条线段的长度都不为0。

首先我是自定了一些数据结构来存储输入的数据,Point, Line, Rectangle, RectangleSet。

然后通过输入获取了点的信息后,需要做一个首尾相连的判断。我的基本思路是,首先将第一条线段作为起始线段,任意选一个端点作为last端点。然后遍历剩下的线段,判断每一条线段中的两个端点是否与last端点相同,如果相同,就把这条线段的另一个端点赋值给last端点,这样两条线段就连接上了,最后循环结束后,判断下第一条线段的另一个端点与最后不断赋值得到的last端点是否是同一个点,就完事了。

在这个遍历的过程中,我添加了一个order的属性,第一条起始线段order为1,其他的order为-1,当发现一条与第一条相连的线段是,将其order值改为2,依序进行,就按顺序将首尾相连的线段标记为1,2,3,4的order值了。

有了order值后,如果图形是个首尾相连的封闭图形,那么就判断平行了,有了order值就很方便,只需要判断1与3是否平行,2与4是否平行即可。

平行如果也达成了,那么就随便判断1与2是否是垂直关系就好了。

最后再判断下每条线段是否为0长度,这样就可以判断是否是矩形了。

因为是用C++写的,各种坑啊……VS调试起来也不熟练。

代码如下:

/*
输入四个点,判断是否是矩形
*/

#include<iostream>
using namespace std;

class Point {
public:
    int x, y = -1;  //默认值负一
    Point() {}

    ~Point() {}

    bool equals (Point p) {
        if (p.x == x && p.y == y) {
            return true;
        } else {
            return false;
        }
    }
};

class Line {
public:
    Po
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值