我有一组点连接在2D笛卡尔空间中形成一个多边形.它以元组的python列表的形式出现
[(x1, y1), (x2, y2), ... , (xn, yn)]
Run Code Online (Sandbox Code Playgroud)
问题是连接它们并在图形中形成一个多边形.(我正在使用matplotlib.path)
我做了一个功能来做到这一点.它的工作原理如下:
它转到第一个点即(x1,y1)并将一条线连接到下一个点即(x2,y2)和一条线从(x2,y2)到(x3,y3)等等......直到结束为止( xn,yn).它通过将(xn,yn)连接到(x1,y1)来关闭多边形.
问题是包含这些点的列表不包含正确顺序的点,因此会导致像这样的坏图(每个闭合的多边形都会自动着色).
例:
对于此顶点列表=`[( - 0.500000050000005,-0.5),( - 0.499999950000005,0.5),( - 0.500000100000005,-1.0),( - 0.49999990000000505,1.0),( - 0.500000050000005,-0.5),( - 1.0000000250000025, - 0.5),(1.0000000250000025,-0.5),(0.499999950000005,0.5),( - 0.9999999750000024,0.5),( - 0.9999999750000024,0.5),(0.500000100000005,-1.0),(0.49999990000000505,1.0),( - 1.0,0.0),( -0.0,-1.0),(0.0,1.0),(1.0,0.0),( - 0.500000050000005,-0.5)]
要点:

点数不良导致:

正确的加入方式:

是否有任何好的(如果可能的话)简单的算法来重新排序点以正确的顺序?`
此代码包含cython类:
cdef class Bench:
cdef long n
def __cinit__(self, long n):
self.n = n
cpdef int factors(self):
n = self.n
cdef int fac = 0
cdef unsigned long i
for i in range(2, n):
if n % i == 0:
fac += 1
return fac
if __name__ == "__main__":
print "hw"
Run Code Online (Sandbox Code Playgroud)
编译成python扩展后我打电话给这个:
from time import time
t1 = time()
import factors_class
ben = factors_class.Bench(1000000007)
print ben.factors()
t2 = time()
print t2 - t1
Run Code Online (Sandbox Code Playgroud)
它打印出207.374788046(秒)
但是纯python版本(只有函数和对它的调用)在~77s运行,没有类结构的cython代码在~10.2s运行
cython中的无类版本:
cdef int factors(unsigned long …Run Code Online (Sandbox Code Playgroud) 这个问题与此处提出的问题相同.
给出一个硬币列表,它们的值(c1,c2,c3,... cj,...)和总和i.找到总和为i的最小硬币数量(我们可以使用我们想要的一种类型的硬币),或者报告不可能以这样的方式选择硬币,使得它们总和为S.
我昨天刚刚介绍了动态编程,我试图为它编写代码.
# Optimal substructure: C[i] = 1 + min_j(C[i-cj])
cdict = {}
def C(i, coins):
if i <= 0:
return 0
if i in cdict:
return cdict[i]
else:
answer = 1 + min([C(i - cj, coins) for cj in coins])
cdict[i] = answer
return answer
Run Code Online (Sandbox Code Playgroud)
在这里,C [i]是金额'i'的最佳解决方案.对于程序,可用的硬币是{c1,c2,...,cj,...},我增加了递归限制以避免超出最大递归深度误差.但是,这个程序只给出了正确的答案,当一个解决方案不可能时,它并没有表明这一点.
我的代码有什么问题以及如何纠正它?
当我使用带ls命令的通配符时,它可以工作.
$ ls '*.{mp3,ogg}' # Showing only two formats in the command
cannot access *.mp3: No such file or directory
1.ogg 2.ogg 3.ogg
Run Code Online (Sandbox Code Playgroud)
但使用find命令不起作用
$ find ~ -iname '*.{mp3,ogg}'
Run Code Online (Sandbox Code Playgroud)
这行中的错误是什么?
python ×3
algorithm ×1
bash ×1
class ×1
cython ×1
find ×1
geometry ×1
linux ×1
ls ×1
matplotlib ×1
performance ×1
python-2.7 ×1