Re: [問題] 如何判斷滑鼠點到圖片的哪個區塊

看板C_and_CPP (C/C++)作者 (Lifelong-Study)時間13年前 (2012/12/14 20:29), 編輯推噓4(405)
留言9則, 4人參與, 最新討論串3/3 (看更多)
※ 引述《locklose (允)》之銘言: : ※ 引述《simonly0001 (Lifelong-Study)》之銘言: : : 開發語言 VC.Net : : 是這樣的,小弟有一個畫面是用繪圖指令畫出一個時鐘, : : 希望達到的功能是 : : 當使用者按一下滑鼠左鍵時,時針轉到使用者點的位置,點右鍵則是轉動分針 : : 目前卡在不知如何判斷使用者點到哪個區塊, : : 圖片的啟始點(0, 0)在左上角,原心在時鐘中心(width >> 1, height >> 1) : : : step1 判斷你目前輸入是左鍵還右鍵(可查MSDN) : step2 輸入的滑鼠座標是否在鐘的範圍內 : step3 以原點繪製水平/垂直線,座標點也如此 : 若時鐘均勻,水平垂直交叉點(點C)具有90度且完成直角三角 : 這時有邊a(滑鼠座標到點C),邊b(原點到點C),邊c(滑鼠座標到原點) : 可利用arctan(a/b)得到角度,這樣你就能改變時針或分針角度 事情解決了,以下是部分代碼 #define PI 3.1415926545; double centerX = 圓心座標X; double centerY = 圓心座標Y; double pointX = 滑鼠座標X - centerX; double pointY = (滑鼠座標Y - centerY) * (-1.0); double angel(角度) = atan2(PointX, PointY) * 180.0 / PI; 角度的基準線是正上方( 12點整 ),往右的角度為正,往左為負, 當角度為負時,加 360 就可以得到正的角度 angel = (angel < 0) ? angel + 360.0 : angel; 得到角度之後,後面就好處理了,所以就不貼代碼了,有需要的歡迎自由取用 另外請問一下,arctan 要 include 哪個標頭檔呢? 我用 Visual Studio 2010,編譯時提示找不到此函式 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.26.115.84

12/14 21:10, , 1F
一樣 math.h / cmath 即可
12/14 21:10, 1F

12/14 21:11, , 2F
啊我看錯問題了...math.h 裡的函式就叫 atan atan2
12/14 21:11, 2F

12/14 21:11, , 3F
原 PO 應該只是表示用這個函數而已
12/14 21:11, 3F

12/14 21:52, , 4F
呵 小弟是寫 VC.Net 的,因為有前輩介紹要用這個函式
12/14 21:52, 4F

12/14 21:53, , 5F
因為找不到,所以才上來詢問^^"
12/14 21:53, 5F

12/14 22:27, , 6F
這例子 atan2 比 atan / atanf 來得恰當.
12/14 22:27, 6F

12/15 20:05, , 7F
老實說判斷方位角度位址我都傾向先完成三角作圖 囧
12/15 20:05, 7F

12/15 22:01, , 8F
請問什麼是三角作圖
12/15 22:01, 8F

12/16 00:46, , 9F
三角形尺規作圖
12/16 00:46, 9F
文章代碼(AID): #1GonkMID (C_and_CPP)
文章代碼(AID): #1GonkMID (C_and_CPP)