python绘制领域矩形

问题描述:

        使用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.mfbz.cn/a/774763.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

配置并调试后端程序(sql)

1.环境准备 安装VS Code和Node.js插件:确保你已经安装了VS Code和Node.js插件。创建launch.json文件:在你的项目中创建一个.vscode文件夹,并在其中创建launch.json文件。添加以下内容: {"version": "0.2.0"…

【C语言】五子棋(c语言实现)

这里写目录标题 最终效果菜单打印函数棋盘的初始化和打印人人对战落子判空函数悔棋函数判胜负函数人人对战 人机对战一是将直接调用rand生成随机值,这就不可控二是根据棋子赢面来判断哪里落子最好 如果选择退出程序直接exit就行主函数调用逻辑源代码 最终效果 五子棋…

The Sandbox 人物化身每月奖励: 七月版来了!

人物化身的持有者可以从 The Sandbox 领取自己的队服! 视频:https://youtu.be/tSo5FPL7DhE 我们又推出了人物化身所有者月度奖励!在七月,我们将通过 The Sandbox 队服来弘扬体育竞技精神。穿上这些时尚的元宇宙队服,代…

深度报告 | 百度安全携手极越安全发布《整车安全渗透测试白皮书》

注重点,如何确保车辆全生命周期的安全已成为整个行业亟待解决的问题。对于车企而言,通过渗透测试尽量多地发现安全威胁,是确保车辆信息系统的稳定运行、保障用户安全驾驶至关重要的措施。然而,传统的渗透测试方法已无法满足智能网…

Linux miniconda 安装tensorflow-gpu遇到找不到GPU问题

背景: Linux Miniconda python3.9 安装步骤 1、 pip install tensorflow-gpu2.8.0 -i https://pypi.tuna.tsinghua.edu.cn/simple 2、报错如下: 更换镜像源,单独安装 pip install tf-estimator-nightly2.8.0.dev2021122109 -i https:/…

使用 docker buildx 构建跨平台镜像

buildx是Docker官方提供的一个构建工具,它可以帮助用户快速、高效地构建Docker镜像,并支持多种平台的构建。使用buildx,用户可以在单个命令中构建多种架构的镜像,例如x86和arm架构,而无需手工操作多个构建命令。此外bu…

【docker】容器内配置环境变量

背景: 我要把下面的环境变量写到bash脚本里,起名叫environment_start.sh。 目的: 用于每次进入容器dev_into.sh的时候,让系统获取到环境变量。 操作步骤: 先在容器外找个合适的位置写环境变量bash脚本&#xff0c…

bmob Harmony鸿蒙快速开发搜索功能

搜索功能是很多应用都需要的功能。在很多平台上,要开发一个兼容性较好的搜索功能都还是需要添加比较多的视图代码的。 为了解决这个问题,鸿蒙ArkUI提供了一个快速添加搜索功能的视图组件给我们,结合Bmob Harmony鸿蒙SDK的搜索能力&#xff0…

四款主流电脑监控软件(电脑监控软件主要优势)

在现代企业环境中,确保员工的工作效率和企业信息的安全成为了管理者的重要任务。电脑监控软件作为一种有效的管理工具,能够帮助企业实现这些目标。固信电脑监控软件在这方面表现尤为出色,本文将详细介绍固信电脑监控软件的优势及其主要功能&a…

【C++】 解决 C++ 语言报错:Use of Uninitialized Variable

文章目录 引言 使用未初始化的变量(Use of Uninitialized Variable)是 C 编程中常见且危险的错误之一。它通常在程序试图使用尚未赋值的变量时发生,导致程序行为不可预测,可能引发运行时错误、数据损坏,甚至安全漏洞。…

基于芯片CSU8RP1382开发的咖啡秤方案

咖啡电子秤芯片方案精确值可做到分度值0.1g的精准称重,并带有过载提示、自动归零、去皮称重、压低报警等功能,工作电压在2.4V~3.6V之间,满足于咖啡电子秤的电压使用。同时咖啡电子秤PCBA设计可支持四个单位显示,分别为:g、lb、oz、…

云仓酒庄天津分公司:深化业务常态化运营

标题:云仓酒庄天津分公司:深化业务常态化运营,以沙龙为纽带,构建价值叠加的酒业新生态 在当今复杂多变的经济环境中,传统酒业面临着前所未有的挑战与机遇。随着数字化转型的加速和消费者偏好的日益多元化,…

JAVA--JSON转换工具类

JSON转换工具类 import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackso…

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

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

StreamSets: 数据采集工具详解

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 欢迎关注微信公众号:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&a…

【EI会议/稳定检索】2024年应用数学、化学研究与物理工程国际会议(AMPE 2024)

2024 International Conference on Applied Mathematics, Chemical Research, and Physical Engineering 2024年应用数学、化学研究与物理工程国际会议(AMPE 2024) 【会议信息】 会议简称:AMPE 2024 大会时间:点击查看 截稿时间:官网查看 大…

【T+】畅捷通T+产品,将原财务报表中的模板转换到财务报表菜单下。

【问题描述】 畅捷通T3产品中账套使用行业性质是【新会计准测制度】升级到畅捷通T+产品, 行业性质默认为【2001年企业会计制度】, 但是升级成功后,账套的财务报表下没有对应报表模板,需要手工编辑,太费劲了。 并且在T+产品中新建账套,行业性质选择【2001年企业会计制度】…

verilog行为建模(一):基本概念

目录 1.行为描述2.过程(procedural)块3.过程赋值(procedural assignment)4.过程时序控制5.简单延时6.边沿敏感时序7.wait语句 微信公众号获取更多FPGA相关源码: 1.行为描述 行为级描述是对系统的高抽象级描述。在这个级别,表达的是输入和输出之间转换…

比 PIP 快 100 倍的安装工具

uv 是一个由 Rust 开发的 pip 工具,比 pip 快 100 倍,难以置信,不过真的是快太多了。 安装 在 Mac 上直接通过 brew install uv 安装即可。 venv 创建运行环境,默认当前目录下 .venv uv venv 依赖安装 uv pip install -r re…

【Mathematica14.0】快速从下载安装到使用

目录 1.简介 2.下载安装 下载 安装 3.一小时掌握mathematica使用 单元模式 内置函数 符号表达式 迭代器 赋值 通配符及查找替换 函数定义 匿名函数(拉姆达表达式) 函数映射 函数式与运算符 函数自定义选项 图形可视化 交互式界面 数值…
最新文章