Re: [請益] 看懂微積分,就會寫程式???
看板Soft_Job (軟體人)作者StubbornLin (Victor)時間14年前 (2011/12/31 11:35)推噓5(5推 0噓 25→)留言30則, 5人參與討論串20/49 (看更多)
實例的話,我以前接過的案子
用上了所有我懂的線性代數
http://blog.ez2learn.com/2009/08/26/pysketch/
一套向量式的繪圖程式,畫圖的部份使用Cairo,所以這部份的數學
都是由函式庫包辦,但除了畫圖以外的部份都得自己去算
一個最簡單的實例,滑鼠的游標離某條線段有多遠?
因為線段不佔有空間,因此得給他一塊虛擬的面積來方便選取
最簡單的方式就是算出滑鼠離線段的最短距離
面積的形狀看起來會像是條香腸
點和線的關係總共有兩種case,第一種是離兩端點的距離在範圍內
所以不管三七二十一,先拿鼠標位置去算和兩端點的距離
夠近的話就表示在範圍內
另一種case,就是算和線段的距離了,最直覺的想法就是去算鼠標位置
和任一端點的向量,和線段之間的投影,去算出法向量來
mp
●
/ |
/ |
/ |
/ |
p1 ●---------------● p2
sp
這樣一來只要先算出 p1 mp 向量在 p1 p2 向量上的影長
接著算 p1 p2 的單位向量,然後算出p1 sp的向量
就能算出法向量 sp mp 也就能得知滑鼠點 mp 到線段 p1 p2 間的距離
但這還有個問題,就是 mp可能是在線段外面
| above |
|-----------------------| p1 p2 line
| below |
mp必需要在 above 和 below的範圍內,否則整個判斷
就變成是對於直線而不是線段,那要如何判斷在範圍內?
很簡單,算出 p1 sp 的向量 和 p2 sp 的向量時,看它的方向正負
就可以知道它是否是在 above 和 below 的範圍內
這是其中典型用到線性代數的例子
還有很多類似的情況,得用這種方式來算出來
這個case最難的部份是手繪圖型辨識,整個case花了兩週
其它部份加起來一週,手繪辨識做一週
手繪辨識的部份用到了更多的線性代數
但說穿了用的都是我會的簡單方法組合起來
沒用到什麼太高等的東西
但是我得說那些東西我大多都是自己學會的
我大一線性代數還被當掉,因為都沒去上課
早在接觸線性代數以前,就多少有算過相關的東西
不過在看了課本上描述的東西後才瞭解
有這樣的一整套系統是用來解決這類問題的
以我以前寫的2.5D地圖引擎來說
http://kaka-demo.ez2learn.com/
像這種地圖,因為是斜向座標系,所以和一般的直角座標間要有個轉換
國中時只懂得從 地圖座標 轉 直角座標
但 直角座標 轉 地圖座標 沒導出來
所以當要判斷滑鼠指在地圖的哪個格子上時
就用了很蠢的方式去算,記得好像是用一個mask
去判斷是否在那型狀內,很蠢,但可以運作
到了高中知道原來可以去算反矩陣
所以地圖座標轉直角座標就可以用公式去算
簡單又有效
所以,以我自己的經驗來說
我認為,有些東西就算你不懂數學也能用較笨的方法達成
但你懂數學的話,方法會聰明許多
而某些應用的領域,可能是你不懂數學就沒辦法處理的
但是數學的領域這麼廣,圖學用的可能是線性代數
如果是密碼學就是數論,影像處理還得扯微積分
機械學習也扯到很多數學
我想沒有多少人可以懂所有的數學領域
所以這種東西是一種專業,對於程式設計某種應用領域上的專業
沒有這樣的專業也能活得很好,因為大部份的應用都將數學包裝好了
然而如果要接觸那些沒被包裝好的部份,數學就成了必需的技能
這就要看對自己的定位在哪裡
我自己對於自己的定位在於高階的應用開發
能用包裝好的東西就用,真的不能的話,有需要再去學
你要知道的是有哪些東西可以用,可以用來做什麼
而不是一鼓腦將那些東西全硬塞進腦子裡
沒有用到很快就忘了 浪費時間而已
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.170.210.161
推
12/31 11:37, , 1F
12/31 11:37, 1F
→
12/31 11:37, , 2F
12/31 11:37, 2F
→
12/31 11:43, , 3F
12/31 11:43, 3F
→
12/31 11:43, , 4F
12/31 11:43, 4F
→
12/31 11:43, , 5F
12/31 11:43, 5F
→
12/31 11:44, , 6F
12/31 11:44, 6F
→
12/31 11:44, , 7F
12/31 11:44, 7F
推
12/31 11:46, , 8F
12/31 11:46, 8F
推
12/31 11:54, , 9F
12/31 11:54, 9F
→
12/31 11:54, , 10F
12/31 11:54, 10F
→
12/31 11:55, , 11F
12/31 11:55, 11F
→
12/31 11:55, , 12F
12/31 11:55, 12F
→
12/31 11:55, , 13F
12/31 11:55, 13F
→
12/31 11:56, , 14F
12/31 11:56, 14F
→
12/31 11:56, , 15F
12/31 11:56, 15F
→
12/31 11:56, , 16F
12/31 11:56, 16F
→
12/31 11:57, , 17F
12/31 11:57, 17F
→
12/31 11:57, , 18F
12/31 11:57, 18F
→
12/31 11:57, , 19F
12/31 11:57, 19F
→
12/31 11:58, , 20F
12/31 11:58, 20F
→
12/31 11:59, , 21F
12/31 11:59, 21F
→
12/31 12:01, , 22F
12/31 12:01, 22F
→
12/31 12:04, , 23F
12/31 12:04, 23F
→
12/31 12:04, , 24F
12/31 12:04, 24F
→
12/31 12:06, , 25F
12/31 12:06, 25F
→
12/31 12:06, , 26F
12/31 12:06, 26F
推
12/31 12:09, , 27F
12/31 12:09, 27F
→
12/31 12:09, , 28F
12/31 12:09, 28F
→
12/31 12:09, , 29F
12/31 12:09, 29F
推
12/31 13:00, , 30F
12/31 13:00, 30F
討論串 (同標題文章)
Soft_Job 近期熱門文章
PTT職涯區 即時熱門文章
121
234