js判斷鼠標旋轉度數以及順逆方向詳解


有一個需求,判斷鼠標繞某點順時針旋轉n度后做什么事,逆時針旋轉n度后作什么事,即可用到本案例

首先我們可以得到三個點,分別為中心點,起始點和結束點,於是可以知道三點的坐標,再通過余弦定理求出旋轉角度,同時可知三邊的向量,便可通過叉乘求出方向為順時針還是逆時針。

運算代碼如下:

 1 var pointA = {
 2     X: 500,
 3     Y: 300
 4 };
 5 var pointB = {};
 6 var pointC = {};               // A,B,C分別代表中心點,起始點,結束點坐標
 7                                        // 這里通過鼠標的移動獲取起始點和結束點
 8 var typeMouse = false;
 9 var allA = 0;                     // 存放鼠標旋轉總共的度數
10 $(document).on('mousedown', function(e) {
11     pointB.X = e.pageX;
12     pointB.Y = e.pageY;
13     typeMouse = true;          //獲取起始點坐標
14 });
15 $(document).on('mousemove', function(e) {
16     if(typeMouse) {
17     pointC.X = e.pageX;
18     pointC.Y = e.pageY;         // 獲取結束點坐標
19     var AB = {};
20     var AC= {};
21     AB.X = (pointB.X - pointA.X);
22     AB.Y = (pointB.Y - pointA.Y);
23     AC.X = (pointC.X - pointA.X);
24     AC.Y = (pointC.Y - pointA.Y);                   // 分別求出AB,AC的向量坐標表示
25     var direct = (AB.X * AC.Y) - (AB.Y * AC.X);           // AB與AC叉乘求出逆時針還是順時針旋轉
26     var lengthAB = Math.sqrt( Math.pow(pointA.X - pointB.X, 2) +
27     Math.pow(pointA.Y - pointB.Y, 2)),
28     lengthAC = Math.sqrt( Math.pow(pointA.X - pointC.X, 2) +
29     Math.pow(pointA.Y - pointC.Y, 2)),
30     lengthBC = Math.sqrt( Math.pow(pointB.X - pointC.X, 2) +
31     Math.pow(pointB.Y - pointC.Y, 2));
32     var cosA = (Math.pow(lengthAB, 2) + Math.pow(lengthAC, 2) - Math.pow(lengthBC, 2)) /
33     (2 * lengthAB * lengthAC);                 //   余弦定理求出旋轉角
34     var angleA = Math.round( Math.acos(cosA) * 180 / Math.PI );
35     if (direct < 0){
36         allA -= angleA;                       //叉乘結果為負表示逆時針旋轉, 逆時針旋轉減度數
37     } else {
38         allA += angleA;                       //叉乘結果為正表示順時針旋轉,順時針旋轉加度數
39     }
40     pointB.X = pointC.X;
41     pointB.Y = pointC.Y;                   //運算結束后將起始點重新賦值為結束點,作為下一次的起始點
42     }
43 });
44 $(document).on('mouseup', function(e) {
45     typeMouse = false;
46 });

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM