我正在使用 Javascript 制作一个七巧板拼图游戏。我需要检测用户是否用手指画了一个圆形(或类似圆形的形状)。我已经成功收集了数百(如果不是数千)个 x 和 y 的点:
var touchX = event.targetTouches[0].pageX - canvas.offsetLeft;
var touchY = event.targetTouches[0].pageY - canvas.offsetTop;
然后将每个x和y坐标推入一个数组中:
touchMoveX.push(touchX);
touchMoveY.push(touchY);
然后我循环遍历每个数组并创建两个点:
for(var i = 0; i < touchMoveX.length; i++)
{
for(var l=0; l < touchMoveY.length; l++)
{
var xPosition = touchMoveX[i];
var yPosition = touchMoveY[l];
var v1x = touchMoveX[i];
var v2x = touchMoveX[i + 1];
var v1y = touchMoveY[l];
var v2y = touchMoveY[l + 1];
然后,我使用以下公式来计算这两个点之间的角度(以度为单位):
var v1 = {x: v1x, y: v1y}, v2 = {x: v2x, y: v2y},
angleRad = Math.acos( (v1.x * v2.x + v1.y * v2.y) /
(Math.sqrt(v1.x*v1.x + v1.y*v1.y) * Math.sqrt(v2.x*v2.x + v2.y*v2.y) ) ),
angleDeg = angleRad * 180 / Math.PI;
我会把所有角度加起来,看看它们是否接近于360度。
但是上述代码并不很有效。是否有更好的方法呢?非常感谢。