Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- table = []
- d = [(1, 0), (0, 1), (-1, 0), (0, -1)]
- def check(x, y, xLimit, yLimit):
- return x < 0 or y < 0 or x >= xLimit or y >= yLimit
- def f(radius, x, y, xLimit, yLimit):
- minm = 0
- minp = (x, y)
- for dx, dy in d:
- if check(x + radius * dx, y + radius * dy, xLimit, yLimit):
- continue
- Srr, Szz, Srz = 0, 0, 0
- rSum, zSum = 0, 0
- curminv = 1e9
- curminp = (x, y)
- for r in range(radius):
- rSum += r
- zSum += table[x + r * dx][y + r * dy]
- if table[x + r * dx][y + r * dy] < curminv:
- curminv = table[x + r * dx][y + r * dy]
- curminp = (x + r * dx, y + r * dy)
- rAvg = rSum / radius
- zAvg = zSum / radius
- for r in range(radius):
- Srr += (r - rAvg)**2
- Szz += (table[x + r * dx][y + r * dy] - zAvg)**2
- Srz += (r - rAvg) * (table[x + r * dx][y + r * dy] - zAvg)
- if not Szz:
- continue
- curm = Srz / (math.sqrt(Srr) * math.sqrt(Szz))
- if curm < minm:
- minm = curm
- minp = curminp
- return minp[0], minp[1]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement