Сложность заключается в том, что существуют периодические граничные условия, а это означает, что если мой круг находится рядом с левой границей, то мне нужно нарисовать остальную часть его справа, то же самое касается и верха. и вниз.
Вот мой код, который строит решетку. Мне удалось раскрасить точки в зависимости от того, находятся они в круге или нет, но я еще не нарисовал круг.
Код: Выделить всё
from matplotlib import pyplot as plt
import numpy as np
class lattice:
def __init__(self, L):
self.L = L
self.positions = np.array([[[i, j] for i in range(L)] for j in range(L)])
def draw_lattice(self, filename):
X = self.positions[:, :, 0].flatten()
Y = self.positions[:, :, 1].flatten()
plt.scatter(X, Y, s=10)
plt.xticks([])
plt.yticks([])
plt.title("Lattice")
plt.savefig(filename)
def dist_centre(self):
x0, y0 = np.random.randint(0, self.L), np.random.randint(0, self.L)
self.c0 = (x0, y0)
self.distance = np.zeros((self.L, self.L))
for i in range(self.L):
for j in range(self.L):
x = self.positions[i, j, 0]
y = self.positions[i, j, 1]
# Distance with periodic boundary conditions.
Dx = -self.L/2 + ((x0-x)+self.L/2)%self.L
Dy = -self.L/2 + ((y0-y)+self.L/2)%self.L
dist = np.sqrt(Dx**2 + Dy**2)
self.distance[i, j] = dist
def draw_zone(self, filename, R):
colormap = np.where(self.distance
Подробнее здесь: [url]https://stackoverflow.com/questions/79180528/draw-a-circle-with-periodic-boundary-conditions-matplotlib[/url]