2016-05-09 219 views
0

我想制定一种使用python在屏幕上绘制线条图案的有效方式。使用python高效地绘制线条

前段时间我拼凑了一些代码,可以驱动LAser Spirograph。它们基本上是围绕彼此圆周的运动点旋转的3个圆圈。这产生了一系列点,根据每个圆圈旋转的相对速度来追踪各种图案。

所以,现在我有一个很长的x,y线列表,我想把它作为一条线绘制出来,是否有python中的函数(当前正在玩Pygames),它将采用一系列点并将它们与光滑的曲线。

例如说我有几百个描述这个link模式的点,在Python中是否有一种“简单”的方式来渲染他的全屏模式。我认为这比试图绘制几千个点来获得线的外观要快。

编辑

我一直在假设会有画通过传递函数的起点和终点以及半径说半圆屏幕更快的方法。而不是在曲线上计算2,000点,并将它们分别绘制为点或短直线。我还假设它比单独输出同一条线要快100倍?

+0

[**'pygame.draw.lines' **](http://www.pygame.org/docs/ref/draw.html#pygame.draw.lines) –

+0

嗨,据我所知,它绘制点之间的一系列线条并不顺畅。例如,三个点可以用两条直线连接并形成一个天使或一条平滑曲线。我想要曲线。 – DevilWAH

+0

您需要定义端点的切线和重量。曲线应遵循什么路径? –

回答

1

免责声明这不是一个答案


要在我的评论扩大上述

你不想要的曲线。你想有足够的愚弄感知频率采样曲线

看看的更密集VS粗糙的采样上的是什么屏幕

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

我敢说,有足够高的采样率是什么画看起来像一条曲线,即使是直线段的序列(因为它是明显的,当你看看t vs x的其他两个地方)。

在其他意见中,您被告知您可以使用哪个pygames功能来做您的行为。

+0

嗨,欢呼声全部放出,我的consern试图挑选正确的采样率,对于曲线“0.75-1.25”的某些部分曲线几乎是直的。而从1.25 - 1.75的直线会非常明显地偏离曲线。我可能会恢复到这一点,但会看起来像贝塞尔曲线。 – DevilWAH

+1

当正弦接近最大值时,曲率也有最大值,当正弦越过零点时,曲率接近于零,因此正弦曲线非常接近于直线。并在两个地区进行均等取样。无论如何,我不会试图进一步说服你,因为我觉得我不会说服你。再见 – gboffi