Python,创建map

2023-11-16

import matplotlib.pyplot as mpp
import os,random,math

#matplotlib.version=3.5.1,numpy.version=1.21.5
#创建画布及坐标轴
def set_cavans(width,height):
    px = 1/mpp.rcParams['figure.dpi']
    mpp.figure(figsize=(width*px,height*px))
    mpp.axis([-width/2,width/2,-height/2,height/2])
        
#创建分区
def generate_area(width=500,height=400,standard1=100,standard2=100):
    a,b=int(width/standard1),int(height/standard2)
    area_lists=[]
    for x_area in range(0,a):
        x_min=int(-width/2+x_area*standard1)
        x_max=int(-width/2+x_area*standard1+standard1)
        for y_area in range(0,b):
            y_max=int(height/2-y_area*standard2)
            y_min=int(height/2-y_area*standard2-standard2)
            temp=[x_min,y_min,x_max,y_max]
            area_lists.append(temp)
    return area_lists,a,b

#创建x,y坐标
def generate_coord(area_list):
    coord=[]
    x_min,y_min,x_max,y_max=area_list[0],area_list[1],area_list[2],area_list[3]
    x_pos=random.randint(x_min+2,x_max-2)
    y_pos=random.randint(y_min+2,y_max-2)
    coord.append([x_pos,y_pos])
    return coord

#绘制圆点
def generate_circle(area_lists):
    i=0
    x_gather,y_gather,pos_lists=[],[],[]
    for area_list in area_lists:
        i+=1
        pos_list=generate_coord(area_list)
        pos_lists=pos_lists+pos_list
        word='A'+f'{i}'
        mpp.text(pos_list[0][0],pos_list[0][1]+2,word,fontsize=6)
    for x_y in pos_lists:
        x_gather.append(x_y[0])
        y_gather.append(x_y[1])
    mpp.plot(x_gather,y_gather,'ro')
    return pos_lists

#测量两点之间距离
def measure_distance(x1,y1,x2,y2):
    x=(x1-x2)**2
    y=(y1-y2)**2
    distance=int(math.sqrt(x+y))
    return distance

#两点连接并标距 
def point_connect(a,b,color):
    x1,y1,x2,y2=a[0],a[1],b[0],b[1]
    mpp.plot([x1,x2],[y1,y2],color)
    word=str(measure_distance(x1,y1,x2,y2))
    mpp.text((x1+x2)/2+2,(y1+y2)/2+2,word,fontsize=8)

#绘制地图
def draw_map(pos_lists,a,b):
    n=len(pos_lists)
    color=['b-','g-','r-','c-','m-','y-','k-']
    last_column=list(range(b-1,n,b))
    last_row=list(range(n-b,n))
    for i in range(0,n-1):
        P=0
        a_list=pos_lists[i]
        for j in [i+1,i+b,i+b+1]:
            if P<=1:
                flag=random.randint(0,2)
            if flag:
                if i in last_column:
                    j=i+b
                if i in last_row:
                    j=i+1
                b_list=pos_lists[j]
                x=random.randint(0,6)
                point_connect(a_list,b_list,color[x])
                P+=1
    mpp.savefig('map.png')
    mpp.show()

#主函数
width,height,standard1,standard2,=800,600,200,100
set_cavans(width,height)
area_lists,row,column=generate_area(width,height,standard1,standard2)
pos_lists=generate_circle(area_lists)
draw_map(pos_lists,row,column)
os.system('pause')
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python,创建map 的相关文章

随机推荐

  • 我的第一个油猴脚本「屏蔽CSDN底下的登录栏」

    CSDN博客不登录就弹这么个东西 挡住视线不胜其烦 你问我为啥不登录 登录过呀 关了浏览器又要重新登 csdn的session不保存的吗 emmmm我也不太懂这方面的东西 于是我就想 在每次访问csdn博客的时候 浏览器都能自动执行一个js
  • c++ vector基本函数、排序、查找用法

    终于把自己的个人博客安排上啦 欢迎访问我的个人博客 XJHui s Blog vector用法目录 1 基本用法 2 vector的删除操作 3 vector的sort排序 4 翻转vector中的所有元素 5 find 函数的用法 6 v
  • python中shutil.copy()的用法

    shutil copy src dst 是为了复制文件内容且不包含元数据从src到dst dst必须是完整的文件路径文件名 注意 如果src和dst是同一个文件 就会引发错误 dst必须是可写的 否则将引发错误 如果dst已经存在 就会被替
  • C++函数模板的具体化

    一 函数模板的具体化 先看看C 98里面有关具体化方法的标注 对于给定的函数名可以有非模板函数 模板函数 显式具体化函数以及它们的重载函数 显示具体化以template lt gt 打头 并通过函数参数来指示类型 优先级顺序为 非模板函数
  • PyCharm分屏,左右。

    Windows下安装的pycharm 为了对比两个文件的不一致 把新旧文件 左右分屏呈献 操作如下图 即可把当前编辑界面 呈献在屏幕2中 左右对比更方便 当然也可以选择上下分屏 Split Horizontally
  • 程序员工资真的高吗?

    一直以来都很奇怪的事情 每当别人知道我晚上7点才下班 他们几乎都是会发出这样的惊呼 你居然这么晚才下班 而每当这个时候又轮到我来惊呼了 这么早7点就下班还算晚 每次打听别人的下班时间 要么5点30就下班了 要么6点就下班了 打听完了 这个时
  • 【A-Star算法】【学习笔记】【附GitHub一个示例代码】

    文章目录 一 算法简介 二 应用场景 三 示例代码 Reference 本文暂学习四方向搜索 一 算法简介 一个比较经典的路径规划的算法 相关路径搜索算法 广度优先遍历 BFC 深度优先遍历 DFC Di jkstra算法 最短路径问题 D
  • 实现 strStr() 函数

    实现 strStr 函数 给定一个 haystack 字符串和一个 needle 字符串 在 haystack 字符串中找出 needle 字符串出现的第一个位置 从0开始 如果不存在 则返回 1 示例 1 输入 haystack hell
  • STM32 电机教程 30 - 无刷无感入门2

    前言 无刷直流 Brushless Direct Current BLDC 电机是一种正快速普及的电机类型 它可在家用电器 汽车 航空航天 消费品 医疗 工业自动化设备和仪器等行业中使用 正如名称指出的那样 BLDC 电机不用电刷来换向 而
  • 面渣逆袭:计算机网络六十二问,三万字图文详解

    基础 1 说下计算机网络体系结构 计算机网络体系结构 一般有三种 OSI 七层模型 TCP IP 四层模型 五层结构 三种网络体系结构 简单说 OSI是一个理论上的网络通信模型 TCP IP是实际上的网络通信模型 五层结构就是为了介绍网络原
  • 小程序锚点定位(通讯录)

    1 使用视图容器组件scroll view 2 在scroll view中设置属性scroll into view 属性值为锚点id 3 在需要的位置设置锚点ID值 点击后将scroll into view设置为对应的id即可跳转 示例 名
  • idea空Maven项目部署Tomcat提示:no artifacts configured 、以及后续 No artifacts marked for deployment解决方案

    no artifacts configured 没有配置artifacts 关于artifacts的介绍推荐大家看这篇博文点击查看 我们先退到项目界面 右击项目名导入web程序所需的库 导入成功后继续配置tomcat 点击之后我们发现又报了
  • 聊聊网络安全等级保护“能力验证”:配置核查(Linux系统)

    前言 作为测评机构一定会知道每年会举行 能力验证 活动 申请认可和获准认可的合格评定机构通过参加能力验证活动 包括 CNAS 组织实施或承认的能力验证计划 测评机构间比对和测量审核 证明其技术能力 之前的线上会议也表明了对测评机构能力建设方
  • 关于Layui后台ajax返回问题

    刚接触LayUI 几次出现 返回的数据异常 问题 皆是因为数据的格式不对 这里做个小笔记 一般的格式这个样子 data result array code gt 0 msg gt count gt 100 data gt
  • pycm库详解_机器学习评价

    详细介绍pycm库的使用方法
  • qqkey获取原理_qqkey获取器下载

    qqkey获取工具 QQkey控制接收生成器 是一款类似于灰鸽子的一款软件 不同的是不能不能盗号 在你的好友打开了你配置的文件后 你可以在工具中获取到好友的QQkey信息 可以把对方的QQ当做的自己的QQ一样 想干嘛就干嘛 赶紧来下载使用吧
  • 在 esmodule 环境下使用 jsts

    文章目录 1 说明 Geometry 类 2 安装 3 使用 以 buffer 为例 4 JTS 文档 1 说明 jsts 完全就是根据其老妈 jts 的 java 包结构移植的 除了部分分析功能需要额外注意外 基本上所有的子模块的根路径位
  • C++ 中隐藏DOS调用的命令行窗口

    转自 http hi baidu com jackyho2000 blog item b5c5fabdd3b4db0019d81fbb html 我演示了一下在MFC程序中怎么应用DOS的dir的命令 可是我们遇到了需要解决的问题 首先就是
  • 包含抽象方法的类是抽象类吗?

    如果这个问题的范围是围绕 类 那么 包含抽象方法的类一定是抽象类 因为抽象方法的特征是 必须定义在抽象类中 但是话由说回来了 因为在JAVA中还有一种允许使用抽象方法的结构 那就是接口 在接口中的方法只能是抽象方法 不允许出现具体实现的方法
  • Python,创建map

    import matplotlib pyplot as mpp import os random math matplotlib version 3 5 1 numpy version 1 21 5 创建画布及坐标轴 def set cav