Calculating and displaying a pentagon

安稳与你 提交于 2020-06-29 03:42:29

问题


I'm trying to calculate and show a convex hull for some random points in python.

This is my current code:

import numpy as np
import random
import matplotlib.pyplot as plt
import cv2

points = np.random.rand(25,2)   

hull = ConvexHull(points)

plt.plot(points[:,0], points[:,1], 'o',color='c')

for simplex in hull.simplices:
    plt.plot(points[simplex, 0], points[simplex, 1], 'r')

plt.plot(points[hull.vertices,0], points[hull.vertices,1], 'r', lw=-1)
plt.plot(points[hull.vertices[0],0], points[hull.vertices[0],1], 'r-')
plt.show()

My questions:

  • How can I change the X,Y labels and points limit between 0 to 9? For example (0,1,2,3,4,5,6,7,8,9)
  • How can I mark the points on the convex hull with a circle? As in example

回答1:


Replacing np.rand() with randint(0, 10) will generate the coordinates as integers from 0,1,... to 9.

Using '.' as marker will result in smaller markers for the given points.

Using 'o' as marker, setting a markeredgecolor and setting the main color to 'none' will result in a circular marker, which can be used for the points on the hull. The size of the marker can be adapted via markersize=.

fig, axes = plt.subplots(ncols=..., nrows=...) is a handy way to create multiple subplots.

Here is some code for a minimal example:

from scipy.spatial import ConvexHull
import matplotlib.pyplot as plt
import numpy as np

points = np.random.randint(0, 10, size=(15, 2))  # Random points in 2-D

hull = ConvexHull(points)

fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(10, 3))

for ax in (ax1, ax2):
    ax.plot(points[:, 0], points[:, 1], '.', color='k')
    if ax == ax1:
        ax.set_title('Given points')
    else:
        ax.set_title('Convex hull')
        for simplex in hull.simplices:
            ax.plot(points[simplex, 0], points[simplex, 1], 'c')
        ax.plot(points[hull.vertices, 0], points[hull.vertices, 1], 'o', mec='r', color='none', lw=1, markersize=10)
    ax.set_xticks(range(10))
    ax.set_yticks(range(10))
plt.show()

PS: To show the plots in separate windows:

from scipy.spatial import ConvexHull
import matplotlib.pyplot as plt
import numpy as np

points = np.random.randint(0, 10, size=(15, 2))  # Random points in 2-D
hull = ConvexHull(points)
for plot_id in (1, 2):
    fig, ax = plt.subplots(ncols=1, figsize=(5, 3))
    ax.plot(points[:, 0], points[:, 1], '.', color='k')
    if plot_id == 1:
        ax.set_title('Given points')
    else:
        ax.set_title('Convex hull')
        for simplex in hull.simplices:
            ax.plot(points[simplex, 0], points[simplex, 1], 'c')
        ax.plot(points[hull.vertices, 0], points[hull.vertices, 1], 'o', mec='r', color='none', lw=1, markersize=10)
    ax.set_xticks(range(10))
    ax.set_yticks(range(10))
    plt.show()


来源:https://stackoverflow.com/questions/62376042/calculating-and-displaying-a-pentagon

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!