創作內容

1 GP

Kinect & Circular Sector Collision Function

作者:JerryZ│2015-06-03 23:18:20│巴幣:2│人氣:657
2015.05.30

我唸高中時是第一類組的,其實對數學不是很了解,但自己很喜歡寫程式
一直以來我都認為程式跟數學沒什麼太大關係
但是當我要做這次的功能時,數學帶給我的震撼非常大
我開始相信數學是程式的最佳解了!也有了熱情去面對它!

不過我的基礎沒有很好,如果底下文章有謬誤請見諒,也歡迎各路高手指正:D

為了要讓琴鍵像翅膀一樣張開,而且又能被"碰觸"到
首先我就需要在程式內實作一個扇形的感應區
如果不斷移動的P點進入了這個扇形
就表示P點碰撞了扇形,而那個P點就是指Kinect偵測到的"右手掌"

我以Kinect偵測到的身體中心作為原點C
頭到身體中心的垂直距離作為半徑R
但因為手臂伸直的話絕對比這個R還要長
所以我加了300來確保扇形有一定範圍
扇形以U向量的兩邊展開θ角度(程式內以T表示θ)
我希望整個扇形剛好是上半身的距離,所以將θ設為90度
兩邊展開θ就變成了180度

在幾何學上,扇形可以當作是"角度區間"與"圓形"的交集

換句話說就是要判斷「P點跟C點間的距離小於R」
代入數學上的距離公式後,判斷變為「| P - C | < R」
 
接著要判斷「P點 - C點的向量,要落在U向量跟θ的角度範圍內」
這邊實在很難懂,無論是要代入數學公式或轉譯成程式....

查了一下發現這邊要用「內積(dot product)」來計算兩個向量的夾角
簡單來說
只要判斷「P - C向量」與「U向量」的「內積」是否小於θ就行了
咳咳...用到了內積就表示...
要用以前我高中很不願面對的「三角函數」來算了...
現在跟以前高中算三角函數的差別就在...我現在有Google能用!XDDD

搬出快忘光的「餘弦定理」!
移項後就變成了
有了Cosθ後,我要怎麼求出θ是多少呢?
以前高中沒教,是因為人類很難算常見角度(15,30,60,90)以外的角度
但現在是用電腦,所以查了一下Google後發現
有了Cosθ值可以利用「反餘弦函數」求出θ
在C#中只要呼叫Math.Acos就能調用反餘弦函數
 
一個判斷P點是否進入扇形的Function就這樣完成了!!


由於以前的高中數學都快忘光了,東查查西查查得到的想法都很混亂
打這篇文的用意就是希望透過解釋
讓我一步步了解這個Function是怎麼出來的...
不過即使目前實作了這個Function,還是沒辦法照我想像的樣子來感測


如圖所示,手掌在扇形區域中了,還是沒Return True回來...
看來還有很長一段路要調整啊!!

參考靈感來自Milo,雖然最後我做了很多修改,還是必須謝謝他!
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=2856594
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

1喜歡★jerryc1111 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:Endless Lege... 後一篇:千呼萬喚 Dell XP...

追蹤私訊切換新版閱覽

作品資料夾

ms0489223每天換一首Loop的人
酸欠少女- Sayuri看更多我要大聲說4小時前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】