使用python有效地画线

问题描述 投票:1回答:2

我正在尝试找到一种使用python在屏幕上绘制线条图案的有效方法。

不久前,我整理了一些可以驱动LASER Spirograph的代码。基本上是3个圆圈,每个圆圈都围绕彼此圆周的移动点旋转。这会产生一系列的点,这些点根据每个圆旋转的相对速度来描绘出各种图案。

所以现在我有一长串希望以单线绘制的x,y线,python中是否有一个函数(当前正在与Pygames一起玩),它将获取一系列的点并用平滑的曲线将它们连接起来线。

例如,我在此link中有数百个描述模式的要点,在Python中是否有一种“简单”的方式来呈现完整的模式到屏幕。我认为这比尝试绘制几千个点以获得线条的外观要快。

编辑

我一直认为,通过向函数传递起点和终点以及半径,可以更快地在屏幕上绘制半圆。而不是计算曲线上的2,000个点,然后将它们分别绘制为点或短直线。我还假设绘制一条长100点的直线比输出同一条线作为单独的点更快。

python graphics vector-graphics
2个回答
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])代表一个点,这里为正弦曲线中的一个点,在您的应用中为更复杂的曲线,因此让我们使用不同的采样步骤绘制这些点,以查看采样率是否对您对所绘制内容的感知...

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')

给我

enter image description here

我敢说,以足够高的采样率,绘制的[[looks]]就像一条曲线,即使它是一系列直线段(如您看到tx)。在其他评论中,您被告知可以使用哪个pygames函数来完成任务。


0
投票
对我不起作用。此代码无用。
© www.soinside.com 2019 - 2024. All rights reserved.