發信人GOLDMEMBER.bbs@bbs.cs.nctu.edu.tw (㊣祕密情報員),
看板Programming
標 題Re: [問題] 如何畫一個三角形在console window上阿??
發信站交大資訊次世代BS2 (Wed Jan 24 02:42:39 2007)
轉信站ptt!ctu-reader!ctu-peer!news.nctu!news.cis.nctu!BS2
※ 引述《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]
我承認這其實很無聊,因為在文字模式下你在亮和暗之間頂多只有一個色
階好用,頂多可以兩個色階,像這樣:
(暗)012
3(亮),而這個演算法
在這麼少的顏色數底下跟沒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
推 ephesians:大家來找碴: 61.231.17.16 01/24 03:15
→ ephesians:Big-O到底是描述時間的成長,還是空間的? 61.231.17.16 01/24 03:15
推 pakker:它只是用來描述複雜度的... 61.224.149.105 01/24 04:13
→ pakker:看要套用在空間或時間上都行? 61.224.149.105 01/24 04:14
推 askeing:樓上應該是正解!? 61.57.90.95 01/24 10:57
推 LPH66:我的觀念和三樓一樣 @@ 219.84.44.21 01/24 20:33
→ LPH66:另外推distraction XD 219.84.44.21 01/24 20:34
推 softwind:原PO專業 專業就是王道 140.129.36.188 01/25 00:42