python绘制领域矩形

news2024/11/26 10:28:41

问题描述:

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

代码: 

import matplotlib.pyplot as plt

def 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_points

def 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 plt

def 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_points

def 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_points

def 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_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, 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.coloradmin.cn/o/1897766.html

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

相关文章

电脑为什么会提示丢失msvcp140.dll?怎么修复msvcp140.dll文件会靠谱点

电脑为什么会提示丢失msvcp140.dll?其实只要你的msvcp140.dll文件一损坏,然而你的电脑程序需要运用到这个msvcp140.dll文件的时候,就回提示你丢失了msvcp140.dll文件!因为没有这个文件,你的很多程序都用不了的。今天我…

Purple Pi OH 更改SDK的编译选项

本文适用于在Purple Pi OH开发板更改SDK编译选项。触觉智能的Purple Pi OH鸿蒙开源主板,是华为Laval官方社区主荐的一款鸿蒙开发主板。 该主板主要针对学生党,极客,工程师,极大降低了开源鸿蒙开发者的入门门槛,具有以下…

数据为基 全面布局|美创再入《2024年中国网络安全市场全景图》

近日,网络安全行业研究机构数说安全正式发布《2024年中国网络安全市场全景图》(以下简称全景图)。 美创科技凭借以数据为中心的全面安全产品布局和领先能力,入榜数据库安全(数据库审计/数据库漏扫/数据库防火墙/数据库加密)、数据…

震撼发布!4M-21:苹果多模态AI巨擘,一键解锁21种模态

前沿科技速递🚀 来自洛桑联邦理工学院(EPFL)与苹果科研巨擘的强强联手,震撼发布全新跨时代成果——4M-21模型!这一革命性单一模型,突破性地覆盖了数十种高度多样化的模态,通过大规模多模态数据集…

空状态页面设计的艺术与科学

空状态界面是用户在网站、APP中遇到的因无数据展示而中断体验的界面,这个界面设计对于解决用户疑惑有着很大的帮助。那么我们应该如何设计空状态界面呢?空状态是指在界面设计中,没有内容或数据时所显示的状态。它可能出现在各种情况下&#x…

Docker拉取失败,利用 Git将 Docker镜像重新打 Tag 推送到阿里云等其他公有云镜像仓库里

目录 一、开通阿里云容器镜像服务 二、Git配置 三、去DockerHub找镜像 四、编写images.txt文件 ​五、演示 六、其他注意事项 最近一段时间 Docker 镜像一直是 Pull 不下来的状态,想直连 DockerHub 是几乎不可能的。更糟糕的是,很多原本可靠的国内…

EasyExcel 单元格根据图片数量动态设置宽度

在使用 EasyExcel 导出 Excel 时&#xff0c;如果某个单元格是图片内容&#xff0c;且存在多张图片&#xff0c;此时就需要单元格根据图片数量动态设置宽度。 经过自己的研究和实验&#xff0c;导出效果如下&#xff1a; 具体代码如下&#xff1a; EasyExcel 版本 <depen…

Linux 内核 GPIO 用户空间接口

文章目录 Linux 内核 GPIO 接口旧版本方式&#xff1a;sysfs 接口新版本方式&#xff1a;chardev 接口 gpiod 库及其命令行gpiod 库的命令行gpiod 库函数的应用 GPIO&#xff08;General Purpose Input/Output&#xff0c;通用输入/输出接口&#xff09;&#xff0c;是微控制器…

防静电监控系统在电子制造业智能化转型中的应用价值

在电子制造业迅速向智能化转型的当下&#xff0c;防静电监控系统正发挥着日益重要的作用&#xff0c;其应用价值体现在多个关键方面。 一、ESD防静电监控系统简介 ESD防静电监控系统是对企业防静电设备&#xff08;机器、台垫、离子风机&#xff09;和人员进行实时监控、数据存…

c++之旅第十一弹——顺序表

大家好啊&#xff0c;这里是c之旅第十一弹&#xff0c;跟随我的步伐来开始这一篇的学习吧&#xff01; 如果有知识性错误&#xff0c;欢迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 创作不易&#xff0c;希望大家多多支持哦&#xff01; 一,数据结构…

Linux系统(CentOS)安装Mysql5.7.x

安装准备&#xff1a; Linux系统(CentOS)添加防火墙、iptables的安装和配置 请访问地址&#xff1a;https://blog.csdn.net/esqabc/article/details/140209894 1&#xff0c;下载mysql安装文件&#xff08;mysql-5.7.44为例&#xff09; 选择Linux通用版本64位&#xff08;L…

2024年保安员职业资格考试题库大数据揭秘,冲刺高分!

186.安全技术防范是一种由探测、&#xff08;&#xff09;、快速反应相结合的安全防范体系。 A.保安 B.出警 C.延迟 D.监控 答案&#xff1a;C 187.安全技术防范是以&#xff08;&#xff09;和预防犯罪为目的的一项社会公共安全业务。 A.预防灾害 B.预防损失 C.预防失…

昇思25天学习打卡营第5天 | 神经网络构建

1. 神经网络构建 神经网络模型是由神经网络层和Tensor操作构成的&#xff0c;mindspore.nn提供了常见神经网络层的实现&#xff0c;在MindSpore中&#xff0c;Cell类是构建所有网络的基类&#xff0c;也是网络的基本单元。一个神经网络模型表示为一个Cell&#xff0c;它由不同…

MobaXterm不显示隐藏文件

MobaXterm在左边显示隐藏文件&#xff0c;以.开头的文件&#xff0c;想让它不显示&#xff0c;点击红框按钮就可以了

计算机视觉——opencv快速入门(二) 图像的基本操作

前言 上一篇文章中我们介绍了如何配置opencv&#xff0c;而在这篇文章我们主要介绍的是如何使用opencv来是实现一些常见的图像操作。 图像的读取&#xff0c;显示与存储 读取图像文件 在opencv中我们利用imread函数来读取图像文件,函数语法如下&#xff1a; imagecv2.imre…

Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO

官网&#xff1a;https://streamlit.io/ github&#xff1a;https://github.com/streamlit/streamlit API 参考&#xff1a;https://docs.streamlit.io/library/api-reference 最全 Streamlit 教程&#xff1a;https://juejin.cn/column/7265946243196436520 Streamlit-中文文档…

如何在 Ubuntu上搭建 LAMP

远程登录 Ubuntu系统环境 ssh (User)(IP) # 比如&#xff1a;ssh lennlouis192.168.207.128 为安全起见&#xff0c;建议你使用 root 登录 VPS 后创建一个具有 sudo 权限的帐号。 安装和配置 Apache 2 Apache Http Server 是一个开源的&#xff0c;非常流行&#xff0c;使用…

直播预告 | VMware大规模迁移实战,HyperMotion助力业务高效迁移

2006年核高基专项启动&#xff0c;2022年国家79号文件要求2027年央国企100%完成信创改造……国家一系列信创改造政策的推动&#xff0c;让服务器虚拟化软件巨头VMware在中国的市场份额迅速缩水。 加之VMware永久授权的取消和部分软件组件销售策略的变更&#xff0c;导致VMware…

QoS-优先级映射

拓扑图 配置 先完成此配置复杂流分类-CSDN博客 配置qos map-table 接口开启信任DSCP qos map-table dscp-lpinput 32 output 5input 46 output 6 # interface GigabitEthernet0/0/0trust dscp override # AR1上10.1.1.1 ping 3.3.3.3&#xff0c;该流量标记为EF EF映射为p…

vs 远程链接ssh 开发 简单实验

1.概要 动态编译语言&#xff0c;跨平台必须做分别的编译&#xff0c;比如linux和windows。如何再windows环境下开发编译出linux平台的程序呢&#xff0c;vs支持远程链接编辑&#xff0c;就是再vs中写代码&#xff0c;但是编译确是链接远程的环境编译的。 2.环境准备 2.1 vs…