python绘制领域矩形

问题描述:

        使用python书写代码实现以下功能:给定四个点的坐标,调用一个函数,可以使原来的四个点分别向四周上下左右移动15距离,分别记录下移动后的坐标,然后画出内侧矩形和外侧矩形

代码: 

import matplotlib.pyplot as pltdef move_points(points, distance=15):"""移动给定的四个点,分别向上下左右移动指定的距离。Parameters:points (list of tuples): 四个点的坐标 [(x1, y1), (x2, y2), (x3, y3), (x4, y4)]distance (int): 移动的距离Returns:dict: 包含移动后坐标的字典"""moved_points = {'up': [(x, y + distance) for x, y in points],'down': [(x, y - distance) for x, y in points],'left': [(x - distance, y) for x, y in points],'right': [(x + distance, y) for x, y in points]}return moved_pointsdef plot_rectangles(original_points, moved_points):"""绘制原始矩形和移动后的矩形。Parameters:original_points (list of tuples): 原始的四个点的坐标moved_points (dict): 移动后的点的坐标字典"""fig, ax = plt.subplots()# 原始矩形original_rect = plt.Polygon(original_points, closed=True, fill=None, edgecolor='b', label='Original')ax.add_patch(original_rect)# 移动后的矩形(上下左右分别画出)for direction, points in moved_points.items():moved_rect = plt.Polygon(points, closed=True, fill=None, edgecolor='r', linestyle='--', label=f'Moved {direction}')ax.add_patch(moved_rect)# 设置轴的范围all_points = original_points + [point for points in moved_points.values() for point in points]all_x = [p[0] for p in all_points]all_y = [p[1] for p in all_points]ax.set_xlim(min(all_x) - 10, max(all_x) + 10)ax.set_ylim(min(all_y) - 10, max(all_y) + 10)plt.xlabel('X')plt.ylabel('Y')plt.legend()plt.title('Original and Moved Rectangles')plt.show()# 主程序
original_points = [(10, 10), (30, 10), (30, 30), (10, 30)]# 移动点
moved_points = move_points(original_points)# 绘制矩形
plot_rectangles(original_points, moved_points)

效果:

问题描述:

使用python书写代码实现以下功能:已知给定四个点的坐标,通过调用一个函数,可以使原来的四个点分别向四周上下左右移动15距离,分别记录下移动后的坐标,然后以最外侧的点绘制成一个矩形,内侧的点绘成另外一个矩形,同时保留原来的坐标围成的矩形 

代码:

import matplotlib.pyplot as pltdef move_points(points, distance=15):"""移动给定的四个点,分别向上下左右移动指定的距离。Parameters:points (list of tuples): 四个点的坐标 [(x1, y1), (x2, y2), (x3, y3), (x4, y4)]distance (int): 移动的距离Returns:dict: 包含移动后坐标的字典"""moved_points = {'up': [(x, y + distance) for x, y in points],'down': [(x, y - distance) for x, y in points],'left': [(x - distance, y) for x, y in points],'right': [(x + distance, y) for x, y in points]}return moved_pointsdef get_outermost_and_innermost_points(points_dict):"""获取最外侧和最内侧的点。Parameters:points_dict (dict): 移动后的点的坐标字典Returns:tuple: (最外侧点, 最内侧点)"""all_points = [point for points in points_dict.values() for point in points]xs, ys = zip(*all_points)outermost_points = [(min(xs), min(ys)), (max(xs), min(ys)), (max(xs), max(ys)), (min(xs), max(ys))]innermost_points = [(min(xs), max(ys)), (max(xs), max(ys)), (max(xs), min(ys)), (min(xs), min(ys))]return outermost_points, innermost_pointsdef plot_rectangles(original_points, outermost_points, innermost_points):"""绘制最外侧矩形、最内侧矩形和原始矩形。Parameters:original_points (list of tuples): 原始的四个点的坐标outermost_points (list of tuples): 最外侧的四个点的坐标innermost_points (list of tuples): 最内侧的四个点的坐标"""fig, ax = plt.subplots()# 原始矩形original_rect = plt.Polygon(original_points, closed=True, fill=None, edgecolor='g', label='Original')ax.add_patch(original_rect)# 最外侧矩形outer_rect = plt.Polygon(outermost_points, closed=True, fill=None, edgecolor='b', label='Outermost')ax.add_patch(outer_rect)# 最内侧矩形inner_rect = plt.Polygon(innermost_points, closed=True, fill=None, edgecolor='r', linestyle='--', label='Innermost')ax.add_patch(inner_rect)# 设置轴的范围all_points = original_points + outermost_points + innermost_pointsall_x = [p[0] for p in all_points]all_y = [p[1] for p in all_points]ax.set_xlim(min(all_x) - 10, max(all_x) + 10)ax.set_ylim(min(all_y) - 10, max(all_y) + 10)plt.xlabel('X')plt.ylabel('Y')plt.legend()plt.title('Original, Outermost, and Innermost Rectangles')plt.show()# 主程序
original_points = [(10, 10), (30, 10), (30, 30), (10, 30)]# 移动点
moved_points = move_points(original_points)# 获取最外侧和最内侧的点
outermost_points, innermost_points = get_outermost_and_innermost_points(moved_points)# 绘制矩形
plot_rectangles(original_points, outermost_points, innermost_points)

效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/40304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

提升学生岗位管理效率,构建智慧校园学工管理新模式

智慧校园学工管理系统中的“学生岗位”功能,是连接学生与实践机会的桥梁,它集岗位发布、申请、管理、评价于一体,全方位支持学生在校期间的实践锻炼与能力提升。该功能让校园内外的各类组织能轻松在线发布多样化的实践岗位,比如助…

SAP HCM ABAP DEBUG小技巧

导读 INTRODUCTION 调试小技巧:今天分享下我在处理HCM业务中,通过一些DEBUG技巧,减少DEBUG参数输入的问题,经过会遇到调试代码,有时候DEBUG太快,错过自己想看的代码,有时候不想执行某段代码&…

Python基础教程——10个可视化案例实操,一图胜千言!

让数据集改变你的思维 数据可视化是数据科学家传达洞见和讲述数据故事的关键工具。作为 Python 开发者,我们拥有丰富的可视化库和工具,能够创建各种引人入胜的图表。本文将探索一些鲜为人知但实用的可视化类型,如桑基图(Sankey Diagrams)、脊…

【MySQL】数据类型{tinyint/bit/float/decimal/char/varchar/date/enum/set}

文章目录 1.数据类型分类2.数值类型2.1tinyint 1字节2.2bit 0-64位2.3浮点类型float 4个字节decimal 3.字符串类型char开多少空间为多大varchar开多少是上限 存多少占多大空间日期和时间类型enum和setenum:枚举,“单选”类型;set:…

9.计算机视觉—目标检测

目录 1.物体检测边缘框目标检测数据集总结边缘框代码实现2.锚框:目标检测的一种方法IoU—交并比赋予锚框标号使用非极大值抑制(NMS)输出总结代码实现1.物体检测 边缘框 一个边缘框可以通过四个数字定义 (左上x,左上y),(右下x,右下y)(左上x,左上y,宽,高)(中间x,中间y…

用网上抓取的天气的接口做了一个系统

这个接口数据太全了了,空气质量、雷达预报、小时预报、15天预报、实况、aqi排名,云量、预警、生活指数包圆了,数据接口如下图所示: 万年历 万年历接口 行政区划边界GEOJSON 国家统计局区划编码 全国城市区划编码经纬度 天气实况 …

10计算机视觉—物体检测算法

目录 1.R-CNN(区域卷积神经网络)2014兴趣区域(RoI)池化层Fast RCNN 2015Faster R-CNN 2015Mask R-CNN 2017总结2. SSD(单发多框检测)2016SSD模型总结3.YOLO(你只看一次)快!很重要4.目标检测算法性能对比5.SSD代码实现 使用很少,比不上yolo多尺度锚框实现SSD代码实现训练…

浅谈渗透测试实战

很多时候,在看白帽子们的漏洞的时候总有一种感觉就是把web渗透简单地理解成了发现web系统漏洞进而获取webshell。其实,个人感觉一个完整的渗透(从黑客的角度去思考问题)应该是以尽一切可能获取目标的系统或者服务器的最高权限&…

Go语言工程管理

本文内容为Go工程创建和配置开发及简单程序示例。 目录 工程管理 GOPATH 配置GOPATH GOROOT 新建系统变量 配置go工程 添加go path 简单的程序实现 程序代码 开始运行 运行结果 内容解析 总结 工程管理 GOPATH go语言的项目,需要有特定的目录结构进行…

【人工智能】GPT-5的即将到来:从高中生进化到,,,博士生?

GPT-5的即将到来:从高中生进化到,博士生? 随着近月GPT-4o的出世,OpenAI也在进行一系列的采访和介绍接下来的展望和目标。 在6月22日的采访中,美国达特茅斯工程学院公布了OpenAI首席技术官米拉穆拉蒂的访谈内容。穆拉蒂确认&#…

urfread刷算法|构建一棵树

大意 示例标签串: 处理结果: 题目1 根据标签串创建树 需求 需求:给出一个字符串,将这个字符串转换为一棵树。 字符串可以在代码里见到,是以#开头,按照\分割的字符串。 你需要将这个字符串&#xff0…

ChatGPT 论文助手:如何用 AI 技术加速学术写作过程

ChatGPT在论文写作中的应用 ChatGPT作为一个先进的语言模型,在学术论文创作领域提供显著帮助。它不仅提升学生与研究者的写作效率,还优化论文质量并引入创新观点。以下是ChatGPT在论文写作中的几种具体应用: 提升写作效率 生成写作构思&…

数据结构——树的基础概念

目录 1.树的概念 2.树的相关概念 3.树的表示 (1)直接表示法 (2)双亲表示法 (3)左孩子右兄弟表示法 4.树在实际中的运用(表示文件系统的目录树结构) 1.树的概念 树是一种非线性的数据结构&#xff0…

【机器学习】分类算法-KNN算法实现

一、前言 最近,在学习机器学习相关的内容,就想着能不能跑一些机器学习的Demo,这样更方便后期的学习,于是在B站上,找了一个Up主【abilityjh】的视频,跟着学,跟着敲代码,自己在博客上将学的东西&a…

轻松搞定Docker!教你一键删除所有镜像!

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 Docker 是一种流行的容器化平台,它提供了一种轻量级且可移植的方式来打包、分发和运行应用程序。 在使用 Docker 进行应用程序开发和部署时,我们通常会创建和使用各种镜像。然而,随着时间的推移,我们可能会积累大量的镜…

【C语言】volatile 关键字

在C语言中,volatile关键字用于声明一个变量,告知编译器该变量的值可能会被程序之外的某些因素(如硬件或其他并发线程)改变。因此,编译器在优化代码时不能对这个变量做假设,也不能优化掉对它的读取或写入操作…

Python学习笔记六

1.实现4*4随机矩阵 #生成一个随机4*4的数组 import numpy as np np.random.seed(1)#固定随机数 每次都是同一个 ()里面的数字不同 对应的随机数也不同 np.random.rand() anp.random.randint(0,100,16).reshape(4,4)#0~100的随机整数 包含16个元素 pri…

[JS]正则表达式

介绍 正则表达式是定义匹配字符串的规则, 在JS中, 正则表达式也是对象, 通常用于查找或替换符合规则的文本 许多语言都支持正则表达式, 在前端中常见的场景就是表单验证和敏感词替换 语法 正则字面量 / / const str 好好学习,天天向上 // 1.定义规则: const reg /好///…

2024年上半年网络工程师下午真题及答案解析

试题一(20分) 某高校网络拓扑如下图所示,两校区核心(CORE-1、CORE-2),出口防火墙(NGFW-1、NGFW-2)通过校区间光缆互联,配置OSPF实现全校路由收敛,两校区相距40km。两校区默认由本地…

第6章:结构化开发方法

第6章:结构化开发方法 系统设计基本原理 1、抽象 抽象是一种设计技术,重点说明一个实体的本质方面,而忽略或者掩盖不是很重要或非本质的方面。 模块化 模块化是指将一个待开发的软件分解成若干个小的、简单的部分一模块,每个模…