用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

回到顶部