2013-03-22 75 views
-4

我試圖畫一條線。避免行長變爲零

是否有人開發了一個圖形環境,並知道如何避免行長度爲零時的NaN值?

在二維環境中,用戶可能會移動一條線或調整它的大小......我在這個區域遇到問題,在運行期間長度變得無效,導致形狀消失或行爲異常,例如變成點。

我該如何正確做到這一點?

+0

我不認爲你問了一個問題。 – wRAR 2013-03-22 23:36:44

+0

但是一條長度爲0的線實際上是一個點!你會期待什麼? – 2013-03-22 23:36:47

+0

至少不要太過分,並不斷增加負面分數(這是沒有用的),你能否把我引薦給其他論壇,我可以問這個問題?我的意思是強迫人們不要說話是一回事,但要求在另一個論壇上分享我的問題是另一回事。 – 2013-03-26 19:11:40

回答

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

另一個問題可能在於矢量在旋轉後需要標準化,否則它們可能會在每次旋轉時一點一點地收縮,直到變得可見。 – 2013-03-22 23:38:35

+0

嗨Virtlink,感謝您的鏈接和示例。但是,此算法用於繪製給出2個端點的線段。就我而言,我們正在使用Windows API提供的內置DrawLine方法。 當開始點和結束點相同,然後計算返回NaN時,會發生該問題。那麼我們正在使用的起點和終點已經變成了NaN,這怎麼可能有用呢? – 2013-03-26 19:06:43