Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何正确绘制具有偏移坐标的六边形?_Python_Matplotlib_Coordinate Systems_Hexagonal Tiles - Fatal编程技术网

Python 如何正确绘制具有偏移坐标的六边形?

Python 如何正确绘制具有偏移坐标的六边形?,python,matplotlib,coordinate-systems,hexagonal-tiles,Python,Matplotlib,Coordinate Systems,Hexagonal Tiles,这是我的代码: 导入matplotlib.pyplot作为plt 从matplotlib.patches导入RegularPolygon 将numpy作为np导入 offCoord=[-2,-2],-1,-2],[0,-2],[1,-2],[2,-2]] 图,ax=plt子批次(1) ax.set_方面(“相等”) 对于offCoord中的c: 十六进制=规则多边形((c[0],c[1]),曲率=6,半径=2./3,α=0.2,边色=k') ax.添加补丁(十六进制) plt.自动缩放(启用=真

这是我的代码:

导入matplotlib.pyplot作为plt
从matplotlib.patches导入RegularPolygon
将numpy作为np导入
offCoord=[-2,-2],-1,-2],[0,-2],[1,-2],[2,-2]]
图,ax=plt子批次(1)
ax.set_方面(“相等”)
对于offCoord中的c:
十六进制=规则多边形((c[0],c[1]),曲率=6,半径=2./3,α=0.2,边色=k')
ax.添加补丁(十六进制)
plt.自动缩放(启用=真)
plt.show()
附加图像中的预期结果与实际结果

请告诉我为什么我的六边形不是一条一条地排列,而是相互重叠?
我做错了什么?

很简单,你的几何图形错了。您指定的半径为2/3。检查您的文档中是否有
RegularPolygon
;我想你会发现正确的半径是0.577(sqrt(3)/3)或者接近这个值。

正六边形的半径等于它的边。在这种情况下,适当的偏移量应为:
偏移=半径*3**0.5
。如果半径为2/3,偏移量应为1.1547k,其中k=-2,-1…

使用余弦定律(对于角度为120度且边为r、r和1的等腰三角形):

这是正确的代码:

import matplotlib.pyplot as plt
from matplotlib.patches import RegularPolygon
import numpy as np


offCoord = [[-2,-2],[-1,-2],[0,-2],[1,-2],[2,-2]]

fig, ax = plt.subplots(1)
ax.set_aspect('equal')

for c in offCoord:
    # fix radius here
    hexagon = RegularPolygon((c[0], c[1]), numVertices=6, radius=np.sqrt(1/3), alpha=0.2, edgecolor='k')
    ax.add_patch(hexagon)
plt.autoscale(enable = True)
plt.show()

半径
太大。看起来像是
RegularPolygon
将“半径”定义为中心和每个顶点之间的距离。因此,需要使用一些几何图形来计算该值,以便从中心到边的距离为1。
import matplotlib.pyplot as plt
from matplotlib.patches import RegularPolygon
import numpy as np


offCoord = [[-2,-2],[-1,-2],[0,-2],[1,-2],[2,-2]]

fig, ax = plt.subplots(1)
ax.set_aspect('equal')

for c in offCoord:
    # fix radius here
    hexagon = RegularPolygon((c[0], c[1]), numVertices=6, radius=np.sqrt(1/3), alpha=0.2, edgecolor='k')
    ax.add_patch(hexagon)
plt.autoscale(enable = True)
plt.show()