当我在pygame中处理一个项目时,我注意到pygame.draw.line()
和pygame.draw.lines()
的工作方式有点不同。我想要的结果是由pygame.draw.lines()
生成的,它不像pygame.draw.line()
那样生成奇怪的行。但是我需要在pygame模块PIL
中重复这个过程,在那里它没有一个同时绘制多行的函数。你知道吗
为了模拟这个过程,我仔细研究了上面提到的两个函数的内部编码。我得到的是大量的C代码和指针,对我来说太多了。见here。你知道吗
我确实发现了一个可疑的代码块,我不完全理解。但如果我这样做了,我想我也许可以把它编码成python。所以我需要帮助。。。你知道吗
for(loop = 1; loop < length; ++loop)
{
item = PySequence_GetItem(points, loop);
result = TwoIntsFromObj(item, &x, &y);
Py_DECREF(item);
if(!result) continue; /*note, we silently skip over bad points :[ */
我可以推断PySequence GetItem()
返回一个PyObject
对应于循环(即索引)。但是TwoIntsFromObj()
对我来说太多了。见here。你知道吗
编辑:
所以为了把事情弄清楚一点,我会解释一下我想做什么。我想把一幅图表示成一系列Z阶曲线。台阶比“暗”部分大,比“光”部分小。我做了一个算法,一个用于“替换”较低密度区域的递归函数。但是pygame.draw.line
的for
循环不像pygame.draw.lines
那样画得很好。图片在下面的链接中…
abnormal Z-order curve
normal Z-order curve
有趣的是,它甚至不是一条连续的线:(
它是否与我的for
循环有关?你知道吗
# draw.aaline
for i in range(len(oldGridCopy)-1):
if SEE:
pygame.draw.aaline(windowSurface, BLACK, (oldGridCopy[i][0]*oldGridCopy[i][4] +left, oldGridCopy[i][1]*oldGridCopy[i][5] +top), (oldGridCopy[i+1][0]*oldGridCopy[i][4] +left, oldGridCopy[i+1][1]*oldGridCopy[i][5] +top),10)
pygame.display.flip()
fpsClock.tick(2)#FPS*FPS*FPS)
pointList.append([oldGridCopy[i+1][0]*oldGridCopy[i+1][4] +left,oldGridCopy[i+1][1]*oldGridCopy[i+1][5] +top])
return pointList,oldGridCopy
# draw.aalines
if MIRO:
pygame.draw.aalines(windowSurface, BLUE, False, miro) # miro is pointList
复杂性的原因有点难以解释。代码只处理点的(x,y)位置(浮点类型)。两个表达式的点列表相同。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐