用Python matplot 绘制五角星平面
求大神告知,怎么用matplot 画出五角星的平面,像是图片中圆形这样,由均匀分布的散点构成,但是形状是五角星型的。用其他包画也可以,主要是需要各个散点的坐标数据,用来做多目标优化测试。拜托啦,菜鸟感激不尽,实在查不到用什么公式表示x,y,z轴(Z轴可以不用管)。
回答
构建五个外点和五个内点,向内延伸就好。看了你的图例,越外圈,精度越低,那么效果是这样
以下是代码
# -*- coding: utf-8 -*-"""
Created on Thu Sep 18 10:55:00 2020
@author: Eikoh
"""
import numpy as np
import math
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
ax = plt.subplot(111, projection='3d') # 创建一个三维的绘图工程
r = 100 #五角星顶点距离中心距离
v = 4 #
l = math.floor(r / v)
parr = [0,1,2,3,4]
for j in range(l):
data = [[],[],[]]
#5个外点 5个内点
for i in range(len(parr)):
data[0].append(math.cos(math.pi * 0.4 * parr[i]) * r)
data[1].append(math.sin(math.pi * 0.4 * parr[i]) * r)
data[2].append(1)
R = r * math.sin(math.pi * 0.1)/math.sin(math.pi * 0.2)
data[0].append(math.cos(math.pi * 0.4 * parr[i] + math.pi * 0.2) * R)
data[1].append(math.sin(math.pi * 0.4 * parr[i] + math.pi * 0.2) * R)
data[2].append(1)
r = r - v
if r <= 0:
break
tdt = [[],[],[]]
#边 散点
for i in range(len(data[0])):
cur = i
if i == len(data[0]) - 1:
nex = 0
else:
nex = i + 1
k = (data[1][nex] - data[1][cur]) / (data[0][nex] - data[0][cur])
b = data[1][nex] - k * data[0][nex]
xs = np.arange(data[0][cur],data[0][nex],(data[0][nex] - data[0][cur]) / 20) #每条边由20个散点组成
xs = xs[1:len(xs)]
xy = []
for j in range(len(xs)):
tdt[0].append(xs[j])
tdt[1].append(k * xs[j] + b)
tdt[2].append(1)
x, y, z = data[0],data[1],data[2] #r间距下的10个顶点
ax.scatter(x[:len(x)], y[:len(y)], z[:len(z)], c='b',s=1) # 绘制数据点
x, y, z = tdt[0],tdt[1],tdt[2] #r间距下的所有边
ax.scatter(x[:len(x)], y[:len(y)], z[:len(z)], c='b',s=1) # 绘制数据点
ax.set_zlabel('Z') # 坐标轴
ax.set_ylabel('Y')
ax.set_xlabel('X')
plt.show()
以上是 用Python matplot 绘制五角星平面 的全部内容, 来源链接: utcz.com/a/44202.html