爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 13235|回复: 8

[源代码] Python绘制【水立方】表面的【泰森多边形】

[复制链接]

新浪微博达人勋

发表于 2022-9-13 23:28:25 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
1、需求缘起

今天有老师想画【泰森多边形】,我上网搜了下这是个啥,

原来,其实是我们常见的一种图,是用多边形把平面上的散点分割成块,类似以下的效果

泰森多边形.png

根据 百度百科-泰森多边形 的说法,

这个图有一些比较实用的几何特征,包括:
1、每个泰森多边形内仅含有一个离散点数据;
2、泰森多边形内的点到相应离散点的距离最近;
3、位于泰森多边形边上的点到其两边的离散点的距离相等。
可用于定性分析、统计分析、邻近分析等。

它不仅有着数学几何上的应用价值,还在建筑上有应用:

水立方.jpg

水立方表面的多边形就是【泰森多边形】!





密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2022-9-13 23:45:37 | 显示全部楼层
本帖最后由 15195775117 于 2022-9-15 16:00 编辑

2、寻找源代码之路

【泰森多边形】这种复杂程度的算法,看起来是有一定年头的,
根据
泰森多边形之泰森是美国气象学家,中国有称之为荷兰气象、气候学家可能是一个“教科书级”的误传
这个算法可能诞生于1911年。

那么,网上应该有成熟的函数才是,Python版的应该也肯定有。

找了些中文的帖子,但是------
有的,是Python2版的,
有的,给了程序,但没给程序里的数据文件,跟我闹呢!
有的,一看就是自己手写算法实现的,我哪能轻信你的自由发挥哟!我要的是使用官方库的示例!

最后,我看到一些帖子都是用scipy的一个函数,于是上官网,找到了这个:

scipy.spatial.voronoi_plot_2d

看到官网示例的图,我眼前一亮:
官网.png

官网的代码,两句就说清了用法!
事实证明------百度帖子多垃圾,官网代码最实在!


Voronoi函数返回值的含义,见:
scipy.spatial.Voronoi

泰森多边形法函数属性理解




密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-9-13 23:53:01 | 显示全部楼层
3、源代码

以下是官网示例


import numpy as np
from scipy.spatial import Voronoi, voronoi_plot_2d
import matplotlib.pyplot as plt

# 随机散点:
rng = np.random.default_rng()
points = rng.random((10,2))

# 奇怪:windows系统下该函数返回失败,也没报错
# CentOS下正常返回
vor = Voronoi(points)
print('计算结果:',vor)

# 制图:
fig = voronoi_plot_2d(vor)

fig = voronoi_plot_2d(vor,
    show_vertices=False,
    line_colors='blue',
    line_width=2,
    line_alpha=1,
    point_size=10)

plt.savefig('Tyson.jpg')
plt.close()


效果图:

Tyson.jpg




tyson_polygon.py

598 Bytes, 下载次数: 8, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-9-14 01:48:54 | 显示全部楼层
第一次知道泰森多边形还是在最强大脑国际赛上面上面
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-9-14 08:31:24 | 显示全部楼层
我一直觉得能找到官网示例读懂改一改自用就是相当厉害的了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-9-15 17:09:24 | 显示全部楼层
4、通用形式

根据这位日本友人提供的程序:

用Python计算并绘制有界(封闭)的Voronoi图

我们可以画出平时常用的矩形画布的、填色的泰森多边形:
泰森多边形.jpg

帖子中的程序,我也做了一番整理,待整理好发出。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-10-8 10:05:19 | 显示全部楼层
15195775117 发表于 2022-9-13 23:53
3、源代码

以下是官网示例

此段代码 windows 中复现成功
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-10-8 11:28:36 | 显示全部楼层
topmad 发表于 2022-10-8 10:05
此段代码 windows 中复现成功

哦??那问题出在哪,奇怪!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2024-1-18 15:25:20 | 显示全部楼层
15195775117 发表于 2022-9-15 17:09
4、通用形式

根据这位日本友人提供的程序:

同学想问一下要怎么给日本友人的代码做画布填充呢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表