행렬의 등거리 점

BigMick

부동 소수점 값의 행렬이 있습니다. 주어진 원점 (x 및 y 인덱스, 점 "0")과 관련하여 가장 가까운 점 ( "1")부터 특정 숫자 ( "12"까지)까지 등거리 점의 색인을 얻고 싶습니다. 애니메이션 예) :등거리 점의 애니메이션

거리는 점과 점 0 사이의 경사 범위입니다. 예를 들어 점 "4"의 거리는 sqrt (2 ^ 2 + 1 ^ 2) = sqrt (5) = 2.24입니다.

효과적인 방법으로 이러한 인덱스를 얻기 위해 해당 알고리즘을 아는 사람이 있습니까?

한 라이너

질문을 다시 표현하면 중심까지의 유클리드 거리를 늘려 점을 열거하려고합니다.

다음은 https://math.stackexchange.com 에서이 문제 에 대한 두 가지 답변입니다. how-to-enumerate-2d-integer-coordinates-order-by-euclidean-distancealgorithm-for-enumerating-grid-points-by-distance -주어진 지점에서

원래:

  • 대칭을 사용하여 점만 고려하십시오 0 <= x <= y.
  • 주어진 x포인트에 대해 증가함에 따라 열거됩니다 y.
  • 우선 순위 대기열을 사용하여 각 수직선에 대한 다음 후보를 유지합니다.

으로 n당신이 생성 마지막 인덱스, 시간 복잡도가 될 것입니다 O(n log n)및 공간의 복잡성 O(sqrt(n)).

주의 : 부동 소수점 계산을 피하려면 점의 순서를 변경하지 않는 제곱 거리를 고려하십시오.

이 아이디어를 구현하는 파이썬 코드는 다음과 같습니다.

import heapq

def yield_all_quadrant(x, y): 
    s = set([(x, y), (-x, y), (x, -y), (-x, -y),
             (y, x), (-y, x), (y, -x), (-y, -x)]) 
    for u, v in sorted(s): 
        yield u, v

def indices(X, Y):
    q = [(0, 0, 0)]
    d_current = 0
    index = 0
    while True:
        d, x, y = heapq.heappop(q)
        if d > d_current:
            index += 1
            d_current = d
        for u, v in yield_all_quadrant(x, y):
            yield (X + u,Y + v), index
        if not y:
            heapq.heappush(q, (d + 2*x + 1, (x+1), 0))
        if y < x:
            heapq.heappush(q, (d + 2*y + 1, x, y+1))

예를 들어 작은 함수에서 그리드를 채우는 데 사용됩니다.

import itertools 
def fill_grid(size, center): 
    grid = [[0]*size for _ in range(size)] 
    def clip(e): 
        coord, index = e 
        return all(0 <= c < size for c in coord) 
    for (x,y), i in itertools.islice(filter(clip, indices(*center)), 0, size**2): 
        grid[x][y] = i 
    return grid 

그리고 결과

print('\n'.join(' '.join('%2d'%i for i in gi) for gi in fill_grid(20, (8,8))))

54 48 43 39 35 33 31 30 29 30 31 33 35 39 43 48 54 59 67 74
48 42 38 34 30 27 26 24 23 24 26 27 30 34 38 42 48 55 62 69
43 38 32 28 25 22 20 19 18 19 20 22 25 28 32 38 43 50 56 64
39 34 28 24 21 17 15 14 13 14 15 17 21 24 28 34 39 46 53 60
35 30 25 21 16 13 12 10  9 10 12 13 16 21 25 30 35 41 49 57
33 27 22 17 13 11  8  7  6  7  8 11 13 17 22 27 33 40 47 55
31 26 20 15 12  8  5  4  3  4  5  8 12 15 20 26 31 38 45 53
30 24 19 14 10  7  4  2  1  2  4  7 10 14 19 24 30 37 44 52
29 23 18 13  9  6  3  1  0  1  3  6  9 13 18 23 29 36 43 51
30 24 19 14 10  7  4  2  1  2  4  7 10 14 19 24 30 37 44 52
31 26 20 15 12  8  5  4  3  4  5  8 12 15 20 26 31 38 45 53
33 27 22 17 13 11  8  7  6  7  8 11 13 17 22 27 33 40 47 55
35 30 25 21 16 13 12 10  9 10 12 13 16 21 25 30 35 41 49 57
39 34 28 24 21 17 15 14 13 14 15 17 21 24 28 34 39 46 53 60
43 38 32 28 25 22 20 19 18 19 20 22 25 28 32 38 43 50 56 64
48 42 38 34 30 27 26 24 23 24 26 27 30 34 38 42 48 55 62 69
54 48 43 39 35 33 31 30 29 30 31 33 35 39 43 48 54 59 67 74
59 55 50 46 41 40 38 37 36 37 38 40 41 46 50 55 59 66 73 80
67 62 56 53 49 47 45 44 43 44 45 47 49 53 56 62 67 73 79 85
74 69 64 60 57 55 53 52 51 52 53 55 57 60 64 69 74 80 85 93

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

행렬의 한 지점에서 행렬의 다른 모든 지점까지의 거리 찾기

분류에서Dev

N 차원 공간의 3 점에서 최소 거리로 등거리 점 계산

분류에서Dev

np 행렬 계산을 사용하여 점 집합 사이의 거리 계산

분류에서Dev

주어진 지점에서 N 개의 등거리 무작위 지점을 가져옵니다.

분류에서Dev

8 점 알고리즘의 필수 행렬

분류에서Dev

SymPy의 점-평면 거리

분류에서Dev

Matlab의 Contour로 표시된 삼각 행렬에서 점의 조건부 제거

분류에서Dev

시퀀스 행렬에서 두 점 사이의 거리를 어떻게 찾습니까?

분류에서Dev

다각형의 경계를 따라 등거리 지점을 생성하지만 CW / CCW

분류에서Dev

Matlab의 등가 곡면에서 정점 제거

분류에서Dev

행렬의 요소 및 jgrapht 라이브러리를 기반으로 정점 및 가장자리 정의

분류에서Dev

Embedding 행렬로 등거리 다차원 벡터 생성

분류에서Dev

하스켈의 지점 간 거리

분류에서Dev

2 gps 지점 사이의 거리

분류에서Dev

축에 대한 점의 거리 찾기

분류에서Dev

두 점 사이의 거리 계산 (Haskell)

분류에서Dev

순차적 점 사이의 거리 postgres

분류에서Dev

점에서 타원까지의 거리

분류에서Dev

벡터와 점 사이의 거리

분류에서Dev

MATLAB의 산점도 2D 행렬

분류에서Dev

최대 상호 등거리 점을 포함하는 선 찾기

분류에서Dev

모든 지점에서 첫 번째 지점까지의 거리

분류에서Dev

점에서 유한 점 집합까지의 거리

분류에서Dev

Seaborn 산점도의 점에서 흰색 테두리 제거

분류에서Dev

점 집합과 특정 점 사이의 최소 거리

분류에서Dev

MySQL 트리거 사용의 장점 / 단점

분류에서Dev

길이 x의 선분을 따라 n 개의 등거리 점 배열을 생성하는 방법은 무엇입니까?

분류에서Dev

다른 두 점에서 등거리에있는 선에서 점 찾기

분류에서Dev

궤적 데이터를 리샘플링하거나 정규화하여 점의 간격이 균등하도록합니다.

Related 관련 기사

  1. 1

    행렬의 한 지점에서 행렬의 다른 모든 지점까지의 거리 찾기

  2. 2

    N 차원 공간의 3 점에서 최소 거리로 등거리 점 계산

  3. 3

    np 행렬 계산을 사용하여 점 집합 사이의 거리 계산

  4. 4

    주어진 지점에서 N 개의 등거리 무작위 지점을 가져옵니다.

  5. 5

    8 점 알고리즘의 필수 행렬

  6. 6

    SymPy의 점-평면 거리

  7. 7

    Matlab의 Contour로 표시된 삼각 행렬에서 점의 조건부 제거

  8. 8

    시퀀스 행렬에서 두 점 사이의 거리를 어떻게 찾습니까?

  9. 9

    다각형의 경계를 따라 등거리 지점을 생성하지만 CW / CCW

  10. 10

    Matlab의 등가 곡면에서 정점 제거

  11. 11

    행렬의 요소 및 jgrapht 라이브러리를 기반으로 정점 및 가장자리 정의

  12. 12

    Embedding 행렬로 등거리 다차원 벡터 생성

  13. 13

    하스켈의 지점 간 거리

  14. 14

    2 gps 지점 사이의 거리

  15. 15

    축에 대한 점의 거리 찾기

  16. 16

    두 점 사이의 거리 계산 (Haskell)

  17. 17

    순차적 점 사이의 거리 postgres

  18. 18

    점에서 타원까지의 거리

  19. 19

    벡터와 점 사이의 거리

  20. 20

    MATLAB의 산점도 2D 행렬

  21. 21

    최대 상호 등거리 점을 포함하는 선 찾기

  22. 22

    모든 지점에서 첫 번째 지점까지의 거리

  23. 23

    점에서 유한 점 집합까지의 거리

  24. 24

    Seaborn 산점도의 점에서 흰색 테두리 제거

  25. 25

    점 집합과 특정 점 사이의 최소 거리

  26. 26

    MySQL 트리거 사용의 장점 / 단점

  27. 27

    길이 x의 선분을 따라 n 개의 등거리 점 배열을 생성하는 방법은 무엇입니까?

  28. 28

    다른 두 점에서 등거리에있는 선에서 점 찾기

  29. 29

    궤적 데이터를 리샘플링하거나 정규화하여 점의 간격이 균등하도록합니다.

뜨겁다태그

보관