2013-03-22 2 views
-4

나는 회선을 그리려하고있다.0이되도록 회선 길이 피하기

누구나 그래픽 환경을 개발했으며 선 길이가 0이되면 NaN 값을 피하는 방법을 알고 있습니까?

2D 환경에서 사용자가 선을 이동하거나 크기를 조정할 수 있습니다 ... 런타임 중에 길이가 잘못되어 도형이 사라지거나 비정상적으로 점으로 변하는 등의 문제가 발생합니다. .

어떻게하면 제대로 할 수 있습니까?

+0

나는 당신이 질문 한 것으로 생각하지 않습니다. – wRAR

+0

그러나 길이가 0 인 라인은 실제로 점입니다! 너는 무엇을 기대 하느냐? –

+0

적어도 부정적인 점수를 추가하는 대신 (도움이되지 않는),이 문제를 제기 할 수있는 다른 포럼을 참조 할 수 있습니까? 나는 사람들에게 이야기하지 말라고 강요한다는 것은 하나의 문제이지만, 다른 포럼에서 나의 이슈를 공유하라고 요청하는 것은 다른 것입니다. –

답변

2

Bresenham's line algorithm을 살펴보십시오. 그것은이 NaN의 결과 수 없도록 예를 들어, 의사가 분열을 사용하지 않습니다 : (위키 백과에서)

function line(x0, y0, x1, y1) 
    dx := abs(x1-x0) 
    dy := abs(y1-y0) 
    if x0 < x1 then sx := 1 else sx := -1 
    if y0 < y1 then sy := 1 else sy := -1 
    err := dx-dy 

    loop 
    setPixel(x0,y0) 
    if x0 = x1 and y0 = y1 exit loop 
    e2 := 2*err 
    if e2 > -dy then 
     err := err - dy 
     x0 := x0 + sx 
    end if 
    if e2 < dx then 
     err := err + dx 
     y0 := y0 + sy 
    end if 
    end loop 

또한 선을 그립니다 곳 같은 좌표의 시작과 끝 지점입니다. 귀하의 정의에 따라 길이는 0 또는 1입니다.

+0

또 다른 문제는 회전 후에 벡터가 정규화되어야한다는 것입니다. 그렇지 않으면 벡터가 나타날 때까지 매 회전마다 조금씩 축소 될 수 있습니다. –

+0

안녕하세요 Virtlink, 링크 및 예제에 감사드립니다. 그러나이 알고리즘은 2 개의 끝점이 주어진 선분을 그리는 데 사용됩니다. 필자는 Windows API가 제공하는 내장 된 DrawLine 메서드를 사용하고 있습니다. 시작 지점과 끝 지점이 같고 계산 결과가 NaN 인 경우 문제가 발생합니다. 그렇다면 우리가 사용하고있는 시작점과 끝점이 이미 NaN이되어 어떻게 유용 할 수 있습니까? –