python画小车

文章目录

在这里插入图片描述

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
import matplotlib.transforms as transforms
import numpy as np
# 创建图形窗口和坐标轴对象
fig, ax = plt.subplots()


# 绘制小车矩形
def plot_robot(x, y, yaw, robot_length=2, robot_width=1):
    corner_x = x - robot_length / 2
    corner_y = y - robot_width / 2
    rectangle = Rectangle((corner_x, corner_y), robot_length, robot_width, angle=yaw, fill=True)
    ax.add_patch(rectangle)


# 设置坐标轴范围
ax.set_xlim(0, 30)
ax.set_ylim(0, 30)

# 初始化小车位置
car_pos = [10, 10, 0]  # 使用列表存储小车位置 [x, y]

# 绘制初始小车
plot_robot(car_pos[0], car_pos[1],car_pos[2])

n=0

# 手动控制小车移动
def move_car(event):
    if event.key == 'up':
        plt.cla()
        car_pos[2] += 15
        angle_rad = np.deg2rad(car_pos[2])  # 将角度转换为弧度
        radius = 3  # 围绕的半径
        x = car_pos[0] + radius * np.cos(angle_rad)  # 计算新的 x 坐标
        y = car_pos[1] + radius * np.sin(angle_rad)  # 计算新的 y 坐标
        plot_robot(x,y,car_pos[2])
    elif event.key == 'down':
        plt.cla()
        car_pos[2] -= 15
        angle_rad = np.deg2rad(car_pos[2])  # 将角度转换为弧度
        radius = 3  # 围绕的半径
        x = car_pos[0] + radius * np.cos(angle_rad)  # 计算新的 x 坐标
        y = car_pos[1] + radius * np.sin(angle_rad)  # 计算新的 y 坐标
        plot_robot(x, y, car_pos[2])
    elif event.key == 'left':
        plt.cla()
        car_pos[0] -= 1
        plot_robot(car_pos[0], car_pos[1],car_pos[2])
    elif event.key == 'right':
        plt.cla()
        car_pos[0] += 1
        plot_robot(car_pos[0], car_pos[1],car_pos[2])
    elif event.key == 'escape':
        plt.close()

    # 获取小车质心坐标
    center_x = car_pos[0] + 0.5
    center_y = car_pos[1] + 0.25
    print("Car center coordinates:", center_x, center_y)

    # 重新绘制图形
    plt.draw()

    # 设置固定的坐标轴范围
    plt.xlim(0, 30)
    plt.ylim(0, 30)


# 绑定键盘事件
fig.canvas.mpl_connect('key_press_event', move_car)

# 显示图形
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vsropy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值