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)

效果:

相关推荐
Theodore_10222 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
网易独家音乐人Mike Zhou3 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
安静读书3 小时前
Python解析视频FPS(帧率)、分辨率信息
python·opencv·音视频
----云烟----4 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024064 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
小二·4 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic5 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it5 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康5 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神5 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式