易画图,难交互。

旋转手势,计算旋转方法有很多

如下图:

A为旋转中心,B为旋转起点,C为旋转终点

那么问题就来了,旋转角度BAC为多少?

方法1:atan2方法

degree = Math.toDegrees(Math.atan2(x1-x2,y1-y2));

简单方便,一句解决,但由于atan2角度限制,所以体验不是很好

方法2:矢量

根据矢量AB、AC计算角度,空间向量夹角公式

x1 = x1 / ((x1-x)^2 + (y1-y)^2);

y1 = y1 / ((x1-x)^2 + (y1-y)^2);

x2 = x2 / ((x2-x)^2 + (y2-y)^2);

y2 = y2 / ((x2-x)^2 + (y2-y)^2);

degree = Math.toDegrees(Math.acos(x1*x2 + y1*y2));

突然发现变成数学题,满满的都是泪啊,算了不说了

    public static double getRotateAngle(double x1, double y1, double x2, double y2) {double epsilon = 1.0e-6;double nyPI = Math.acos(-1.0);double dist, dot, degree, angle;dist = Math.sqrt( x1 * x1 + y1 * y1 );x1 /= dist;y1 /= dist;dist = Math.sqrt( x2 * x2 + y2 * y2 );x2 /= dist;y2 /= dist;dot = x1 * x2 + y1 * y2;if ( Math.abs(dot-1.0) <= epsilon )angle = 0.0;else if ( Math.abs(dot+1.0) <= epsilon )angle = nyPI;else {double cross;angle = Math.acos(dot);cross = x1 * y2 - x2 * y1;if (cross < 0 ) {angle = 2 * nyPI - angle;}}degree = angle *  180.0 / nyPI;return degree;}

旋转角度计算(旋转手势)相关推荐

  1. 疯狂ios讲义之实例:通过旋转手势旋转图片

    实例:通过旋转手势旋转图片 本实例将会对前面的实例进行改进,在前面实例的基础上增加一个旋转手势处理器,从而让该应用既可根据用户捏合手势对图片进行缩放,也可根据用户旋转手势对图片进行旋转. 复制上面的应 ...

  2. android定义两个监听,Android中的2个手指旋转手势监听器

    我试图找出使图像旋转的最佳方法,用户的手指向左或向右拖动,以及旋转角度. float x1 = lastEvent[0] - lastEvent[1]; float y1 = lastEvent[2] ...

  3. Unity通过旋转手势控制转盘旋转

    在VR虚拟场景的物理实验室模块中,我想做一个切割磁感线发电机的模拟装置:为了让用户更加真实的操作设备,让用户通过手柄的旋转手势,实现转盘的同步转动. (之后补gif图) 原理,获取到需要转动的物体中心 ...

  4. 小程序的拖拽、缩放和旋转手势

    在开发中,有时会遇到像App中的手势那样的效果,下面就仿照App实现了一下. wxml部分: <view class="touch-container"><vie ...

  5. iOS旋转手势 (Rotation )

    //抽象类 特点 不能创建对象 UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWit ...

  6. 定位(1):两点对+两旋转角度计算转换矩阵

    定位(1):两点对+两旋转角度计算转换矩阵 已知: 坐标系A和坐标系B(全站仪坐标系/大地坐标系(竖直方向向上))对应的两个点的坐标. 点1在A坐标系下的坐标A1(X1,Y1,Z1); 点1在B坐标系 ...

  7. 旋转编码器旋钮程序_让我们使用SwiftUI构建具有旋转手势的复古音频旋钮

    旋转编码器旋钮程序 SwiftUI简直就是小菜一碟 (It's A Piece Of Cake With SwiftUI) Building something as seemingly simple ...

  8. 【OpenCV】人脸旋转角度计算

    // SeetaFacesTest.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h"#include <iostream> #inc ...

  9. iOS手势全埋点:轻拍手势、长按手势、捏合手势、旋转手势、轻扫手势、平移手势、屏幕边缘平移手势

    文章目录 前言 I.手势全埋点方案 1.1 轻拍手势全埋点 1.2 长按手势全埋点 II .右划返回的事件与scrollView滚动事件冲突的解决方案 see also 前言 由于UIGestureR ...

  10. android 手势旋转,Android检测旋转手势

    近日在github上面看到一篇讲Android检测旋转手势的,觉得挺有意思的,现在分享给大家. 主要涉及到一些初中的几何知识和反正切函数的使用,分析如下. 旋转是一种两个手指的多点触屏动作,屏幕上的旋 ...

最新文章

  1. 今日看点:“靠脸进站”的刷脸系统究竟是如何实现的
  2. string:删除string中指定位置的字符?指定的所有字符?
  3. 使用汇编软件emu8086输出十次Hello World!
  4. gperf linux 安装_Gperftools安装
  5. 施乐7556_富士施乐Fuji Xerox WorkCentre 7556 驱动
  6. 选择排序详解(Java实现)
  7. 《圈圈教你玩USB》之 USB鼠标 描述符
  8. 微信开发者工具构建npm
  9. python控制51单片机的红绿灯_51单片机控制交通灯_51单片机红绿灯编程
  10. 微型计算机就是完全采用大规模集成电路,湖南工大计算机在线作业
  11. 【微信小程序多人开发的配置流程】
  12. Java图形用户界面
  13. 融资租赁产品计算内部收益率IRR
  14. bom实现方块移动_js实现方块上下左右移动效果
  15. 接着这次机会,发一下我做试管的经历~
  16. 【算法设计与分析】-- 分治法
  17. Fastqc使用说明
  18. MYSQL全文检索 MATCH AGAINST 转为 SQLalchemy
  19. 网站关键词优化该怎么做?
  20. 数据中心运营商OneAsia宣布与APG建立战略合作伙伴关系

热门文章

  1. 下载微信公众号视频文件
  2. 智能眼镜上可否能有“MIUI”?
  3. Android笔记:自定义锁屏
  4. python去除重复单词_Python重复的单词
  5. idea发现git出现cannot run git:cannot identify version of git executable :no response
  6. Excel中文转拼音
  7. python 获取股票的交易数据
  8. PHP 51tracking物流单个查询接口调用
  9. 一次编写命令时遇到的问题,Ambiguous method call.both
  10. win7 添加XP共享打印机