我正在尝试使用python在屏幕上绘制线条图案的有效方法。
不久前,我拼凑了一些可以驱动LAser Spirograph的代码。这基本上是3个圆圈,每个圆圈围绕彼此圆周的移动点旋转。这会产生一系列的点,根据每个圆圈旋转的相对速度来追踪各种模式。
所以现在我有一个很长的x,y线列表,我想绘制为单行,python中有一个函数(目前正与Pygames一起玩),它将获取一系列点并用光滑的方式将它们连接起来曲线。
例如,假设我有几百个点来描述这个link中的模式,在Python中是否有一种“简单”的方式来呈现完整的模式到屏幕。我假设这比试图绘制几千个点中的每一个以获得一条线的外观要快。修改
我一直在假设通过传递一个函数起点和终点加上半径,可以更快地绘制半圆形画面。而不是在曲线上计算2,000个点,并将它们分别绘制为点或短直线。我还假设它更快地绘制一条直线100点,而不是输出相同的线作为单独的点?
答案 0 :(得分:2)
免责声明这不是答案
扩展我上面的评论
你不想要曲线。您希望以足以愚弄感知的频率对曲线进行采样
了解更密集和更粗略的采样对屏幕上绘制内容的感知效果
import numpy as np
import matplotlib.pyplot as plt
t = np.linspace(0, np.pi*3, 301)
x = np.sin(t)
每个点(t[i], x[i])
代表一个点,这里是正弦曲线中的一个pont,在你的应用中是一个更复杂的曲线,所以让我们用不同的采样步骤绘制这些点,看看采样率是否有影响你对所画内容的看法......
for step in (1, 25, 50):
plt.plot(t[::step], x[::step], label='step=%d'%step)
# ^^^^ ^^^^
plt.ylim((-1.05, 1.05))
plt.legend(loc='best')
给了我
我敢说,在采样率足够高的情况下,绘制的看起来就像曲线一样,即使它是一系列直线段(当你看到其他两个方面时,它很明显) t
vs x
)。
在其他评论中,您被告知可以使用哪种pygames
功能来执行您的行动。