在 MATLAB 或 Python 中解释 3D Voronoi 结果
Interpret 3D Voronoi results in MATLAB or Python
我有一个关于在 MATLAB 或 Python 中的边界内构造 3d Voronoi 多边形的问题。
有顶点
[5,5,5],
[2,2,2],
[8,2,2],
[2,8,2],
[8,8,2],
[2,2,8],
[8,2,8],
[2,8,8],
[8,8,8]
以及边界 [0,0,0]
和 [10,10,10]
我希望得到
这是一个工作示例,请注意我添加了 8 个节点来定义立方体的角。
import pyvoro
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
listResult=pyvoro.compute_voronoi(
[[5,5,5],
[2,2,2],
[8,2,2],
[2,8,2],
[8,8,2],
[2,2,8],
[8,2,8],
[2,8,8],
[8,8,8]], # point positions
[[0.0, 10.0], [0.0, 10.0], [0.0, 10.0]], # limits
1.0, # block size
)
dicResult = listResult[0]
现在pyvoro的顶点如下
[[5.0, 5.0, 9.5],
[5.0, 5.0, 0.50],
[5.0, 9.5, 5.0],
[9.5, 5.0, 5.0],
[0.50, 5.0, 5.0],
[5.0, 0.50, 5.0]]
面孔
[{'adjacent_cell': 4, 'vertices': [1, 3, 2]},
{'adjacent_cell': 2, 'vertices': [1, 5, 3]},
{'adjacent_cell': 1, 'vertices': [1, 4, 5]},
{'adjacent_cell': 3, 'vertices': [1, 2, 4]},
{'adjacent_cell': 8, 'vertices': [2, 3, 0]},
{'adjacent_cell': 7, 'vertices': [2, 0, 4]},
{'adjacent_cell': 6, 'vertices': [3, 5, 0]},
{'adjacent_cell': 5, 'vertices': [4, 0, 5]}]
相邻
[[2, 4, 5, 3],
[3, 5, 4, 2],
[3, 1, 4, 0],
[0, 5, 1, 2],
[2, 1, 5, 0],
[0, 4, 1, 3]]
我怎么
- 计算边界顶点(内部顶点只有6个
但总共有 32 个顶点)
- 组成五个多面体
- 提取边缘
你对边界的理解是错误的。在您的示例中,您在所有八个角和中心以及边界都有站点。
仅传递一个站点会产生微不足道的 voronoi。所有点都最接近这个大小,因此一个区域(一个立方体)填满了所有东西。这就是 pyvoro
产生的结果。
我有一个关于在 MATLAB 或 Python 中的边界内构造 3d Voronoi 多边形的问题。
有顶点
[5,5,5],
[2,2,2],
[8,2,2],
[2,8,2],
[8,8,2],
[2,2,8],
[8,2,8],
[2,8,8],
[8,8,8]
以及边界 [0,0,0]
和 [10,10,10]
我希望得到
这是一个工作示例,请注意我添加了 8 个节点来定义立方体的角。
import pyvoro
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
listResult=pyvoro.compute_voronoi(
[[5,5,5],
[2,2,2],
[8,2,2],
[2,8,2],
[8,8,2],
[2,2,8],
[8,2,8],
[2,8,8],
[8,8,8]], # point positions
[[0.0, 10.0], [0.0, 10.0], [0.0, 10.0]], # limits
1.0, # block size
)
dicResult = listResult[0]
现在pyvoro的顶点如下
[[5.0, 5.0, 9.5],
[5.0, 5.0, 0.50],
[5.0, 9.5, 5.0],
[9.5, 5.0, 5.0],
[0.50, 5.0, 5.0],
[5.0, 0.50, 5.0]]
面孔
[{'adjacent_cell': 4, 'vertices': [1, 3, 2]},
{'adjacent_cell': 2, 'vertices': [1, 5, 3]},
{'adjacent_cell': 1, 'vertices': [1, 4, 5]},
{'adjacent_cell': 3, 'vertices': [1, 2, 4]},
{'adjacent_cell': 8, 'vertices': [2, 3, 0]},
{'adjacent_cell': 7, 'vertices': [2, 0, 4]},
{'adjacent_cell': 6, 'vertices': [3, 5, 0]},
{'adjacent_cell': 5, 'vertices': [4, 0, 5]}]
相邻
[[2, 4, 5, 3],
[3, 5, 4, 2],
[3, 1, 4, 0],
[0, 5, 1, 2],
[2, 1, 5, 0],
[0, 4, 1, 3]]
我怎么
- 计算边界顶点(内部顶点只有6个 但总共有 32 个顶点)
- 组成五个多面体
- 提取边缘
你对边界的理解是错误的。在您的示例中,您在所有八个角和中心以及边界都有站点。
仅传递一个站点会产生微不足道的 voronoi。所有点都最接近这个大小,因此一个区域(一个立方体)填满了所有东西。这就是 pyvoro
产生的结果。