from compas.datastructures import Mesh from compas.topology import trimesh_remesh from compas.topology import delaunay_from_points from compas.topology import voronoi_from_delaunay from compas.geometry import pointcloud_xy from compas.plotters import MeshPlotter points = pointcloud_xy(10, (0, 10)) faces = delaunay_from_points(points) delaunay = Mesh.from_vertices_and_faces(points, faces) trimesh_remesh(delaunay, 1.0, allow_boundary_split=True) points = [delaunay.vertex_coordinates(key) for key in delaunay.vertices()] faces = delaunay_from_points(points) delaunay = Mesh.from_vertices_and_faces(points, faces) voronoi = voronoi_from_delaunay(delaunay) lines = [] for u, v in voronoi.edges(): lines.append({ 'start': voronoi.vertex_coordinates(u, 'xy'), 'end': voronoi.vertex_coordinates(v, 'xy'), 'width': 1.0 }) plotter = MeshPlotter(delaunay, figsize=(10, 6))
# voronoi.vertex[key]['y'] = center[1] # voronoi.vertex[key]['z'] = center[2] # return voronoi # ============================================================================== # Main # ============================================================================== if __name__ == "__main__": from compas.datastructures import Mesh from compas.geometry import pointcloud_xy from compas_plotters import MeshPlotter points = pointcloud_xy(200, (0, 50)) faces = delaunay_from_points(points) delaunay = Mesh.from_vertices_and_faces(points, faces) plotter = MeshPlotter(delaunay, figsize=(8, 5)) facecolor = { fkey: (255, 0, 0) if delaunay.face_normal(fkey)[2] > 0 else (0, 0, 255) for fkey in delaunay.faces() } plotter.draw_vertices(keys=list(delaunay.vertices_on_boundary()), radius=0.5) plotter.draw_faces(facecolor=facecolor) plotter.draw_edges(keys=list(delaunay.edges_on_boundary()))
return sorted(nnbrs, key=lambda nnbr: nnbr[2]) return nnbrs # ============================================================================== # Main # ============================================================================== if __name__ == '__main__': from compas.geometry import pointcloud_xy from compas.plotters import Plotter plotter = Plotter() cloud = pointcloud_xy(999, (-500, 500)) point = cloud[0] tree = KDTree(cloud) n = 50 nnbrs = [] exclude = set() for i in range(n): nnbr = tree.nearest_neighbor(point, exclude) nnbrs.append(nnbr) exclude.add(nnbr[1]) for nnbr in nnbrs: print(nnbr)
from random import random from compas.geometry import pointcloud_xy from compas_plotters import Plotter from compas.utilities import i_to_green from compas.utilities import i_to_red cloud = pointcloud_xy(20, (0, 10), (0, 5)) points = [] for xyz in cloud: n = random() points.append({ 'pos': xyz, 'radius': n, 'edgecolor': i_to_green(n), 'facecolor': i_to_red(n) }) plotter = Plotter(figsize=(8, 5)) plotter.draw_points(points) plotter.show()
from random import random from compas.geometry import pointcloud_xy from compas.utilities import i_to_green from compas.utilities import i_to_red import compas_rhino pc = pointcloud_xy(10, (0, 10), (-3, 3)) print(pc) points = [] for pt in pc: n = random() points.append({'pos': pt, 'color': i_to_red(n)}) compas_rhino.draw_points(points, layer="points", clear=True) """ cloud = pointcloud_xy(200, (0, 10), (0, 5)) points = [] circles = [] for xyz in cloud: n = random() points.append({'pos': xyz, 'color': i_to_red(n)}) circles.append({'plane': [xyz, [0,0,1]], 'color': i_to_red(n), 'radius':n}) layerp = "points" layerc = "circles" compas_rhino.draw_points(points, layer=layerp, clear=True) compas_rhino.draw_circles(circles, layer=layerp, clear=False) """
return lower[:-1] + upper[:-1] # ============================================================================== # Main # ============================================================================== if __name__ == "__main__": # todo: distinguish between vertices of hull and internal vertices from compas.geometry import pointcloud_xy from compas.plotters import Plotter from compas.utilities import pairwise cloud = pointcloud_xy(50, (0, 100), (0, 100)) hull = convex_hull_xy(cloud) points = [] for a in cloud: points.append({'pos': a, 'facecolor': '#0000ff', 'radius': 0.5}) lines = [] for a, b in pairwise(hull + hull[:1]): lines.append({'start': a, 'end': b, 'color': '#ff0000', 'width': 2.0}) plotter = Plotter() plotter.draw_points(points) plotter.draw_lines(lines)
from compas.geometry import pointcloud_xy from compas_plotters import Plotter cloud = pointcloud_xy(20, xbounds=(0, 10), ybounds=(0, 5)) points = [] for xyz in cloud: points.append({'pos': xyz, 'radius': 0.1}) plotter = Plotter(figsize=(8, 5)) plotter.draw_points(points) plotter.show()
vectorized distance function """ alldistances = [((x - p[0])**2 + (y - p[1])**2 + (z - p[2])**2) for p in self.points] print(len(alldistances), type(alldistances[0])) if __name__ == "__main__": # from compas.geometry import Point import numpy as np import matplotlib.pyplot as plt from compas.geometry import pointcloud_xy dim = 300 points = pointcloud_xy(66, (0, dim)) b = Voronoi(points=points, thickness=2.5) # b.get_distance((2,3,4)) #x, y, z = np.ogrid[-14:14:112j, -12:12:96j, -10:10:80j] #m = b.get_distance_numpy(x, y, z) # plt.imshow(m[:, :, 25].T, cmap='RdBu') # plt.colorbar() # plt.axis('equal') # plt.show() m = np.empty((dim, dim)) for y in range(dim): s = ''