我试图产生下面的图片“一个六边形或6角星星多边形,其中数字被放置在每个六个顶点和六个交叉点”。
的数据
下面是我的代码。我一直在找六边形的顶点来画出数字。
import matplotlib.pyplot as plt
import math
def plot_hexagram_with_numbers(side_length):
# Calculate the coordinates for the vertices of the hexagram
vertices = []
mu_hexagon = 360 / 6
for i in range(6):
angle_rad = math.radians(i * mu_hexagon)
x = side_length * math.cos(angle_rad)
y = side_length * math.sin(angle_rad)
vertices.append((x, y))
# Create a list of triangles' vertices for the hexagram
triangles = []
for i in range(6):
triangle = [vertices[i], vertices[(i + 2) % 6], vertices[(i + 4) % 6]]
triangles.append(triangle)
# Plot the hexagram's triangles
for triangle in triangles:
x_coords, y_coords = zip(*triangle)
plt.plot(x_coords, y_coords, 'b-')
# Add numbers at each vertex and intersection of the hexagram
label_distance = side_length / 20 # Adjust this value as needed
for i in range(6):
x, y = vertices[i]
# cant figure out how to find the edges/intersections :(
# Set axis equal and show the plot
plt.axis('equal')
plt.show()
字符串
这是上面代码生成的图像:
的
3条答案
按热度按时间6rvt4ljy1#
你的三角形不是闭合的,因此你在
triangles
中有两个以上的三角形(一个六边形是)。您应该构建完整的三角形,这样您甚至可以将代码泛化为任何大小的尖星(只要它是3的倍数)。我使用shapely来计算交集:
字符串
输出(默认,
nb_points=6
):的数据
输出(
nb_points=9
):的
a2mppw5e2#
你可以考虑使用sympy。使用sympy,您可以创建两个重叠的三角形作为
Polygon
对象。sympyPolygon
对象有一个intersection
方法,如果交点存在,该方法将返回交点。参见documentation here。字符串
的数据
ghhaqwfi3#
注意,我使用了问题中的示例图中使用的标签的奇数序列,以防精确序列是作业的要求之一。
的数据
在下面的代码中,标签的点和锚点使用简单的三角函数放置在不同半径的圆上。
在绘图之前有一些准备工作,因为我想尽可能地对齐所有标签,并且我想尊重顶点和交点的奇数编号。
字符串