# -*- coding: utf-8 -*- import heapq import sys import numpy as np import pylab as PL from scipy.spatial.ckdtree import cKDTree exit() def vec(a, b): return b - a def bfs(points): return def in_ellipse(p, f1, f2, r, offset=0): df = ((f1 - f2) ** 2).sum(0) ** 0.5 d_f1 = ((p - f1) ** 2).sum(1) ** 0.5 d_f2 = ((p - f2) ** 2).sum(1) ** 0.5 return (d_f1 + d_f2) < (df * (1 + r)) num_points = 100000 p_orig = np.random.normal(0, 10, size=(num_points, 2)) tree = cKDTree(p_orig) f1 = np.array([0, -30]) f2 = -f1 # np.random.normal(0, 20, (3,)) # r = 2 ** ((n / cnt) - cnt) mask = in_ellipse(p_orig, f1, f2, 0.1) p = p_orig[mask] p_orig = p_orig[~mask] colors = np.random.random(p.shape[0]) fig = PL.gcf() PL.scatter( p_orig[:, 0], p_orig[:, 1], marker=".", s=0.2, edgecolor="None", c=[(0.0, 0.0, 0.0)], alpha=0.75, rasterized=True, ) PL.scatter( p[:, 0], p[:, 1], marker="s", s=0.2, edgecolor="None", c=colors, rasterized=True ) PL.plot(f1[0], f1[1], "r.", label="Source") PL.plot(f2[0], f2[1], "g.", label="Destination") max_v = max(p_orig[:, 0].max(), p_orig[:, 1].max(), f1[0], f1[1], f2[0], f2[1]) + 2 min_v = min(p_orig[:, 0].min(), p_orig[:, 1].min(), f1[0], f1[1], f2[0], f2[1]) - 2 PL.xlim(min_v, max_v) PL.ylim(min_v, max_v) PL.legend() PL.savefig(sys.argv[1], dpi=1200)