内容:
模仿醉汉在二维空间上的随机漫步:一个醉汉喝醉酒,每次只能走一步,每步分别沿着x,y轴走一个单位长度,试着画出醉汉的轨迹。
方法一:沿任意方向移动
思路:醉汉可以往任意方向走一步,则移动的角度可以为360中的任意数,将角度转化为弧度制则可以计算得到移动的坐标信息,起始的坐标为(0,0),每一次的移动则为当前的位置坐标加上移动的坐标,更新当前的坐标,存储每一次移动后的坐标即可得到相应的路线图。
代码
# -*- coding=utf-8 -*-
# name: nan chen
# date: 2021/3/11 16:00
import matplotlib.pyplot as plt
import numpy as np
import math
# 目前的位置
cur = [0, 0]
# 总步数
allstep = 1000
# 用于存储移动后的每一次位置
movex, movey = [0], [0]
while (allstep > 0):
angle = np.random.randint(360)
# 将随机角度转化为对应的弧度制
index = np.deg2rad(angle)
# 随机移动的x轴与y轴坐标
x = math.cos(index)
y = math.sin(index)
# 移动当前位置
cur[0] = cur[0] + x
cur[1] = cur[1] + y
# 保存目前的位置信息,方便绘制图像
movex.append(cur[0])
movey.append(cur[1])
allstep -= 1
plt.title('walk')
# 初始点
plt.scatter(0, 0, c='r')
plt.plot(movex, movey)
# 结束点
plt.scatter(cur[0], cur[1], c='gold')
plt.show()
运行结果
方法二:沿坐标轴随机移动
思路:醉汉可以往x y方向走一步,则移动的坐标可以为[-1,0,1]三个数中任意两个数的组合。起始的坐标为(0,0),每一次的移动则为当前的位置坐标加上移动的坐标,存储每一次移动后的坐标,并更新当前的坐标。走完后,根据存储的坐标绘制路线图。
代码:
allmove = [cur]
allstep = 1000
while (allstep > 0):
# 随机选取[-1 0 1]中的两个点作为移动位置
indexs = np.random.randint(-1, 2, 2);
move = []
for index in indexs:
move.append(index)
move1 = np.array(move)
# 更改当前位置
cur = cur + move1
allmove.append(cur)
allstep -= 1
movex = []
movey = []
for move in allmove:
movex.append(move[0])
movey.append(move[1])
plt.title('walk')
plt.scatter(0, 0, c='r')
plt.plot(movex, movey)
plt.scatter(cur[0], cur[1], c='gold')
plt.show()