我試圖畫一條線。避免行長變爲零
是否有人開發了一個圖形環境,並知道如何避免行長度爲零時的NaN值?
在二維環境中,用戶可能會移動一條線或調整它的大小......我在這個區域遇到問題,在運行期間長度變得無效,導致形狀消失或行爲異常,例如變成點。
我該如何正確做到這一點?
我試圖畫一條線。避免行長變爲零
是否有人開發了一個圖形環境,並知道如何避免行長度爲零時的NaN值?
在二維環境中,用戶可能會移動一條線或調整它的大小......我在這個區域遇到問題,在運行期間長度變得無效,導致形狀消失或行爲異常,例如變成點。
我該如何正確做到這一點?
看一看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的線。
另一個問題可能在於矢量在旋轉後需要標準化,否則它們可能會在每次旋轉時一點一點地收縮,直到變得可見。 – 2013-03-22 23:38:35
嗨Virtlink,感謝您的鏈接和示例。但是,此算法用於繪製給出2個端點的線段。就我而言,我們正在使用Windows API提供的內置DrawLine方法。 當開始點和結束點相同,然後計算返回NaN時,會發生該問題。那麼我們正在使用的起點和終點已經變成了NaN,這怎麼可能有用呢? – 2013-03-26 19:06:43
我不認爲你問了一個問題。 – wRAR 2013-03-22 23:36:44
但是一條長度爲0的線實際上是一個點!你會期待什麼? – 2013-03-22 23:36:47
至少不要太過分,並不斷增加負面分數(這是沒有用的),你能否把我引薦給其他論壇,我可以問這個問題?我的意思是強迫人們不要說話是一回事,但要求在另一個論壇上分享我的問題是另一回事。 – 2013-03-26 19:11:40