Matplotlib Patches - Круг выглядит как Эллипс - PullRequest
1 голос
/ 28 февраля 2020

Я пытаюсь создать и построить сетку из шестиугольников. Для этого я определил следующую функцию:

def create_hexagon(center):
        INRADIUS = 0.5
        CIRCUMRADIUS = INRADIUS / math.cos(math.radians(30))
        pt1 = [center[0], center[1] + CIRCUMRADIUS]
        pt4 = [center[0], center[1] - CIRCUMRADIUS]
        pt2 = [center[0] + INRADIUS, center[1]+CIRCUMRADIUS/2]
        pt6 = [center[0] - INRADIUS, center[1]+CIRCUMRADIUS/2]
        pt3 = [center[0] + INRADIUS, center[1]-CIRCUMRADIUS/2]
        pt5 = [center[0] - INRADIUS, center[1]-CIRCUMRADIUS/2]
        points = [pt1, pt2, pt3, pt4, pt5, pt6]
        return points

Я знаю, здесь много геометрии, но я уверен, что эти 6 точек описаны правильно в зависимости от центральной точки. Если вы можете придумать более хороший способ, чем индивидуальное описание каждого из 6 пунктов, пожалуйста, дайте мне знать! Далее я прохожу по списку, который содержит все центральные точки. Затем я go вперед и строю шестиугольник вокруг каждого центра:

for pt in centers:
    points = create_hexagon(pt)
    hexagon = plt.Polygon(points, fill=None, edgecolor='k')
    plt.gca().add_patch(hexagon)
    circle = plt.Circle(pt, 0.5 / math.cos(math.radians(30)), fill=None)
    plt.gca().add_patch(circle)

Так как мой график кажется неправильным, я также нарисовал круг вокруг каждого центра. И круг, кажется, не круг, а скорее эллипс: enter image description here Это более очевидно при увеличении: enter image description here

Почему я не получаю круги?

1 Ответ

0 голосов
/ 28 февраля 2020

Ваши расчеты в порядке, единственная плохая вещь - это масштаб (ось x не градуирована как ось y).

Просто добавьте это:

plt.xlim(0, 4.5)
plt.ylim(0, 3.5)
plt.gca().set_aspect('equal', adjustable='box')
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...