Re: [問題] 如何畫一個三角形在console window上阿??

看板Programming作者時間18年前 (2007/01/24 03:01), 編輯推噓5(503)
留言8則, 5人參與, 最新討論串2/2 (看更多)
※ 引述《superfriday.bbs@ptt.cc (你偷try我帳號喔..~~)》之銘言: > 請問一下 > 我想在console window用"0"和 " "畫一個三角形(給定任意三點座標) > 應該怎麼畫呢?? 有啥演算法嗎?? > 謝謝 畫三角形就是畫三條線段嘛,那就找畫線段的演算法就好了。 (如果你很勤奮,看到這裡就可以去找google了。) 你可以實作點斜式,這是最簡單的答案,缺點是要用到 float。寫程式的書 都會告訴你少用 float,但是你不管也沒有人可以阻擋你,反正現在的機器 很快。 (如果你不是那麼勤奮,但是很想自己動手試試看,那麼現在就可以寫了- 說實在這樣硬幹有它的好處,因為有經過自己構想的過程。[*1]) 如果你想直接了解畫直線的祖傳方法,那就是Bresenham's Line Algorithm. http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm#Optimization 下面那個連結的版本就是不用float的最佳化演算法。 如果你還想挑戰更現代化的方法,可以實作吳教授的antialiased line algorithm.這個當然就一定要用到 float了。不過這其實很無聊,原因 底下會講。[*2] http://en.wikipedia.org/wiki/Xiaolin_Wu%27s_line_algorithm --- [*1] 以前我寫過一個計算機概論的作業題目,是依照靜電力公式畫出一個電子 接近氫原子核時候的軌跡。我依照一般寫程式的習慣先算第一點,然後其 他點接著第一點畫下去,這樣記憶體使用量為O(1)。結果我後來看到學長 的程式就嚇到,他居然把所有的點都算出來放在陣列裡,然後再畫線。這 樣的記憶體使用量為O(n),如果他要畫320個點,那就是一個320項的陣列。 居然可以這樣濫用記憶體,使我非常驚訝,並且立刻對他感到非常不齒。 後來我再想起來,卻覺得他的寫法並沒有什麼不好。真正的記憶體用量頂 多就是320x2x4B而已,而這樣寫出的程式卻有很簡潔的好處,不需要解釋 為什麼要額外呼叫函數計算第一點。QB又不是舊時代的 GWBasic,不需要 計較那一點點記憶體。 我不是說他的寫法比較好-再寫一次,我還是會用我的寫法。但是對這種 簡單的問題,他的想法並沒有錯。又不是每個程式都要在資源上必須盡量 摳到變態的地步。 可能有人仍然認為這種寫法違反程式專業的discipline,是不能容忍的。 是的,但是你以為是哪一種系的計算機概論會出這種科學計算的題目當作 業? [*2] 我承認這其實很無聊,因為在文字模式下你在亮和暗之間頂多只有一個色 階好用,頂多可以兩個色階,像這樣:(暗)(亮),而這個演算法 在這麼少的顏色數底下跟沒antialias 應該是差不多,在console 下看起 來更是悲慘。想寫的話當然也可以,不過我猜自己從頭歸納一些padding pattern 會更快,例如利用Big5畫線字元▁▂▃▄▅▆▇等等,不要從這 個演算法開始。這純粹是拿來distraction用的。   -- ▄▄▄▄▄▄▄ ▄▄▄▄ ▄▄▄▄▄▄ <telnet://bbs.cs.nctu.edu.tw> █▄▄▄▄█ █ ▄▄▄▄▄█ Player: GOLDMEMBER ▄█▄▄▄▄█ ▄▄▄█ █▄▄▄▄▄ From: 218-160-89-129.dynamic.hine ☆ 次世代BS2 ☆ 可申請個人板 150MB 相簿 http://pic.bs2.to 交大資訊人 250MB

01/24 03:15, , 1F
大家來找碴:
01/24 03:15, 1F

01/24 03:15, , 2F
Big-O到底是描述時間的成長,還是空間的?
01/24 03:15, 2F

01/24 04:13, , 3F
它只是用來描述複雜度的...
01/24 04:13, 3F

01/24 04:14, , 4F
看要套用在空間或時間上都行?
01/24 04:14, 4F

01/24 10:57, , 5F
樓上應該是正解!?
01/24 10:57, 5F

01/24 20:33, , 6F
我的觀念和三樓一樣 @@
01/24 20:33, 6F

01/24 20:34, , 7F
另外推distraction XD
01/24 20:34, 7F

01/25 00:42, , 8F
原PO專業 專業就是王道
01/25 00:42, 8F
文章代碼(AID): #15jbjl00 (Programming)
文章代碼(AID): #15jbjl00 (Programming)