前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >武大遥感院07年推免测试题

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

作者头像
用户11404404
发布2024-12-13 19:41:09
发布2024-12-13 19:41:09
4500
代码可运行
举报
文章被收录于专栏:Edward的专栏Edward的专栏
运行总次数:0
代码可运行

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

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

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

代码语言:javascript
代码运行次数:0
复制
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)即可:

编写程序输出结果:

对这给出的五个点画图:

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档