- 論壇徽章:
- 4
|
本帖最后由 ssfjhh 于 2013-09-12 18:51 編輯
回復 6# xixi_kathrin
我明白你的那個方法了,確實是個好方法,快了好多。代碼如下:- import random, time
- L = 100000
- N = 50000
- D = 6
- def getpoint(L, N, D):
- goodpoint = []
- badpoint = set()
- while len(goodpoint) < N:
- pointtocheck = tuple(tuple(random.sample(range(D//2, L + 1 - D//2), 2)) for i in range(N - len(goodpoint)))
- for p in pointtocheck:
- if p not in badpoint:
- goodpoint.append(p)
- tempbadpoint = []
- x, y = p
- for i in range(max(D//2, x-D), min(L + 1 - D//2, x + D + 1)):
- for j in range(max(D//2, y-D), min(L + 1 - D//2, y + D + 1)):
- if (i-x)**2 + (j-y)**2 < D**2:
- tempbadpoint.append((i, j))
- badpoint.update(tempbadpoint)
- print(goodpoint)
- start = time.clock()
- getpoint(L, N, D)
- end = time.clock()
- print(end - start)
復制代碼 |
|