2010-07-21 6 views
18

2 차원 격자에 가시선 (line-of-sight) 알고리즘을 구현하려고합니다. 개념적으로 어떻게 작동해야하는지 알고 있지만 알고리즘으로 구현하는 방법을 생각할 수는 없습니다.줄의 모든 격자 사각형을 찾는 방법은 무엇입니까?

기본 아이디어는 매우 간단합니다. 의사 코드 :

function LineOfSight(point1, point2): boolean 
    squares = GetListOfSquaresOnLine(point1, point2) 
    for each square in squares 
    if square.IsOpaque then return false 
    return true 

GetListOfSquaresOnLine (개념) POINT2에서 그리드 광장의 중심에 POINT1에서 그리드 광장의 중심에서 직선을 그리고이 선이 통과하는 모든 사각형의 목록을 반환 . 그러나 이것이 구현 방법을 모르는 부분입니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까? 델파이 또는 C 예제가 선호 되나 필수는 아닙니다.

답변

27

모두를 참조하십시오. 이 기사가 실제 크기로 제공 한 그림이 있습니다. 선이 강조 표시되지 않은 격자 사각형을 통과하므로 Bresenham의 알고리즘은 원하는 것의 하위 집합만을 제공합니다. 당신이 라인을 통해 이동 그리드 사각형을 모두 열거하는 알고리즘을 원하는처럼

alt text

는 "시선"을 언급 이후

, 그것은 소리. 이 세트는 수퍼 커버 (라인의)라고도하며 one algorithm is described here입니다.

this question에 대한 응답에서 제공되는 몇 가지 다른 접근 방식이 있습니다.

업데이트 :Here's another reference

+1

감사! 슈퍼 커버 라인은 기본 Bresenham 라인보다 적합합니다. 이 응답을 허용 된 응답으로 전환합니다. –

+0

이 이미지에는 줄에 사각형이 있지만 강조 표시되어 있지 않습니다. 왜 이런거야? --- 편집 : 이제 이해합니다. 다음은 수퍼 커버 http://eugen.dedu.free.fr/projects/bresenham/을 얻기 위해 알고리즘을 수정하는 링크입니다. – byxor

7

Bresenham's Algorithm 무엇을 찾고 계하십니까?

+0

감사합니다. 전에는 들어 본 적이 없었지만, 내가 뭘 찾고있는 것처럼 보입니다. –

5
+7

내가 upvote 또는 downvote –

+0

해야하는지 확실하지 않습니다. 악한 사람이다. 당신은 단지 재미 있기 때문에 upvote를 받게됩니다 :-) – rhbvkleef

관련 문제