Re: [問題] 如何畫一個三角形在console window上阿??
※ 引述《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]
我承認這其實很無聊,因為在文字模式下你在亮和暗之間頂多只有一個色
階好用,頂多可以兩個色階,像這樣:(暗)0123(亮),而這個演算法
在這麼少的顏色數底下跟沒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
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
01/24 20:34, 7F
推
01/25 00:42, , 8F
01/25 00:42, 8F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
Programming 近期熱門文章
PTT數位生活區 即時熱門文章