Как правильно рисовать шестиугольники со смещенными координатами?

Это мой код:

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:
    hex = RegularPolygon((c[0], c[1]), numVertices=6, radius=2./3., alpha=0.2, edgecolor='k')
    ax.add_patch(hex)
plt.autoscale(enable = True)
plt.show()

Ожидаемый результат против фактического результата в прикрепленном изображении

Ожидаемый результат и фактический результат

Скажите, пожалуйста, почему мои шестиугольники не выстраиваются ребром в ряд, а перекрывают друг друга? Что я делаю не так?


person Алексей Рогаченко    schedule 26.11.2019    source источник
comment
radius слишком большой. Похоже, что RegularPolygon определяет радиус как расстояние между центром и каждой из вершин. Поэтому вам нужно использовать некоторую геометрию, чтобы выяснить, каким должно быть это значение, чтобы расстояние от центра до края было равно 1.   -  person mkrieger1    schedule 26.11.2019


Ответы (3)



Очень просто, ваша геометрия неверна. Вы указали радиус 2/3. Проверьте свою документацию на предмет RegularPolygon; Я думаю, что правильный радиус равен 0,577 (sqrt(3)/3) или что-то близкое к этому.

person Prune    schedule 26.11.2019

Радиус правильного шестиугольника равен его стороне. В этом случае правильное смещение должно быть: offset = radius*3**0.5. Если радиус равен 2/3, смещения должны быть 1,1547k, где k=-2,-1...

person Vasily Mitch    schedule 26.11.2019