武大遥感院07年推免测试题

大二了,想多参加参加写专业竞赛,比如测绘程序设计大赛、易智瑞杯等等,但名额有限,老师让我们这些想参加的,做做往年赛题,然后私发给他,这第一个题是武汉大学遥感信息工程学院研究生推免计算机能力测试。怎么说呢,感觉这题挺简单的,虽然也有可能是我做错了,题目如下,感兴趣也可以来做做:

最开始老师是让我们用c写的,但我读写文件和画图有点问题,还是只能从事老本行了(py)

先把所有代码放前面了,免得不想听我废话的宝子懒得往后翻了


import matplotlib.pyplot as plt

x_li = []
y_li = []
additional_points = [(58589.592080, 54596.681837), (59375.057331, 53520.303530), (57590.790588, 53675.457160), (59646.576183, 54955.474606), (59215.055150, 54426.982554)]
# 读取文件并处理数据
with open("D:\OneDrive\桌面\\2007test.txt", 'r') as file:
    # 跳过第一行
    next(file)
    # 将文件中的对应点放入对应列表中
    for line in file:
        # 去除行末的换行符并分割数据
        data = line.strip().split()
        if len(data) == 2:
            x = float(data[0])
            y = float(data[1])
            x_li.append(x)
            y_li.append(y)

# 绘制散点图
plt.scatter(x_li, y_li, color='blue', label='Data Points')

# 找出最左边、最右边、最上面、最下面的点
min_x, max_x = min(x_li), max(x_li)
min_y, max_y = min(y_li), max(y_li)
print(f"min_x:{min_x} ,max_x:{max_x} ,min_y:{min_y}, max_y:{max_y} ")
# 绘制矩形框
plt.plot([min_x, max_x, max_x, min_x, min_x], [min_y, min_y, max_y, max_y, min_y], color='red',
            label='Bounding Rectangle')
# # 添加额外的五个点
for point in additional_points:
    x, y = point
    plt.scatter([x], [y], color='black', label='Additional Point' if additional_points.index(
        point) == 0 else None)  # Only label the first additional point
num = 1
for i in additional_points:
    if i[0] > min_x and i[0] < max_x and i[1] > min_y and i[1] < max_y:
        print(f"第{num}个点在外包矩形内")
    else:
        print(f"第{num}个点没外包矩形内")
    num += 1

# 添加图例
handles, labels = plt.gca().get_legend_handles_labels()
by_label = dict(zip(labels, handles))
plt.legend(by_label.values(), by_label.keys())

# 添加标签
plt.xlabel('X-axis')
plt.ylabel('Y-axis')

# 显示图表
plt.show()

首先打算是将所有点画出,由于不熟悉c语言读取文件以及画散点图,所以我用python读取该txt文件。对于该文件排版,首先将第一行数据删除,使用next(file)函数,然后后面的坐标左边为x,右边为y,将x,y坐标分别放入列表中存储(类似于c语言中的数组),用plt.scatter(x_li, y_li, color='blue', label='Data Points'),画出散点图如下:

对于求取多边形的外包矩形,即找到分别找到x,y坐标的最大值、最小值,将x的最大值和最小值作两条垂直于x轴的直线,将y的最大值和最小值作平行于x轴的直线,四条直线连接后形成的矩形即为外包矩形,画外包矩形如图:

而给出的四个点坐标判断是否在外包矩形内部就简单了,仅需判断x坐标是否在(xmin,xmax),y坐标是否在(ymin,ymax)即可:

编写程序输出结果:

对这给出的五个点画图:

发现确实有一个点在矩形内,则结果无误。有其他想法的宝子可以评论区讨论哦哦哦

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值