JavaScript求两点之间相对于Y轴的顺时针旋转角度
需求: 已知一个向量,初始位置在y轴方向,如图红色箭头,绕中心点(x1, y1)旋转若干角度后,到达Line(x2,y2 x1,y1)的位置,求旋转角度
分析:
坐标点(x1, y1)(x2, y2)已知,则可利用JavaScript反三角函数求角度。
var getYAngle= function (cx, cy, x2, y2) {var x = Math.abs(cx - x2);var y = Math.abs(cy - y2);var z = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));var tan = x / y;var radina = Math.atan(tan);//用反三角函数求弧度var angle = Math.floor(180 / (Math.PI / radina)) || 0;//将弧度转换成角度if (x2 > cx && y2 > cy) {// point在第四象限angle = (-1) * angle;}if (x2 == cx && y2 > cy) {// point在y轴负方向上angle = 0;}if (x2 < cx && y2 > cy) {//point在第三象限angle = angle;}if (x2 < cx && y2 == cy) {//point在x轴负方向angle = 90;}if (x2 < cx && y2 < cy) {// point在第二象限angle = 180 - angle;}if (x2 == cx && y2 < cy) {//point在y轴正方向上angle = 180;}if (x2 > cx && y2 < cy) {//point在第一象限 angle = 180 + angle;}if (x2 > cx && y2 == cy) {//point在x轴正方向上angle = -90;}return angle;}
然后使用Svg.js修改polygon的属性
// headingPolygonvar Headingpolygon = SVG.get(this.config.panelId + '_Headingpolygon');var xa = x1 - 7, xb = x1 + 7, ya = y1 + 18;var headAngle = this.getYAngle(x1, y1, x2, y2) || 0;Headingpolygon.attr({'points': x1 + "," + y1 + " " + xa + "," + ya + " " + xb + "," + ya,'transform': 'rotate(' + headAngle + ', ' + x1 + ' ' + y1 + ')'});
本文参考: http://www.cnblogs.com/worldFulcrum/p/5573927.html
转载于:https://www.cnblogs.com/liulei-cherry/p/8459006.html
JavaScript求两点之间相对于Y轴的顺时针旋转角度相关推荐
- 7-1 求两点之间距离
定义一个Point类,有两个数据成员:x和y, 分别代表x坐标和y坐标,并有若干成员函数. 定义一个函数Distance(), 用于求两点之间的距离. 输入格式: 输入有两行: 第一行是第一个点的x坐 ...
- PTA 求两点之间距离 (20 分)
定义一个Point类,有两个数据成员:x和y, 分别代表x坐标和y坐标,并有若干成员函数. 定义一个函数Distance(), 用于求两点之间的距离. 输入格式: 输入有两行: 第一行是第一个点的x坐 ...
- 求两点之间距离 C++
求两点之间距离(20 分) 定义一个Point类,有两个数据成员:x和y, 分别代表x坐标和y坐标,并有若干成员函数. 定义一个函数Distance(), 用于求两点之间的距离. 输入格式: 输入有两 ...
- 求两点之间的距离(C++语言)
求两点之间的距离 两种思路: 第一种: 直接利用四个坐标值进行计算. 第二种: 利用结构体描绘坐标,实现对坐标的抽象描述. 此处两个函数同名,但其函数的参数不同,即函数的函数签名不同,是C++特有的函 ...
- C语言 求两点之间线段距离
求两点之间线段位置 函数求距离方法 #include <stdio.h> #include<math.h> double square(); int main() {print ...
- 射线p0-p1相对于Y轴负向顺时针旋转角度
/* * 射线p0->p1相对于Y轴负向顺时针旋转角度 */ double calculateRotateDegree(CGPoint p1, CGPoint p0) {//printf(&qu ...
- C++第一次实验-求两点之间的距离
一.问题及代码 /* 文件名称:Test4.cpp * 作 者:胡嘉威 * 完成日期: 2017 年 2 月 28 日 * 版 本 号:v1.0 * 对任务及求解方法的描述部分:输入两个点的坐标,求两 ...
- JavaScript - demo - 两点之间画线
代码: <html><head></head><body><script>var f;window.onmousedown = functi ...
- 求两点之间的夹角--两种方法
方法一: 假设有两个向量,A和B sigma = acos(dot(A,B)/(norm(A)*norm(B))); %弧度制 换算成角度制:sigma/pi*180 NOTE:此方法求两向量之间的夹 ...
最新文章
- Java基础语法运算和控制符
- session和cookie的区别和联系---转载
- qn模块java脚本_BAT批处理实现自动安装软件功能
- 彻底解决_OBJC_CLASS_$_某文件名, referenced from:问题
- 17.explain_api
- Ios KVC KVO
- 全景摄像技术大有可为
- android 透明变成白色,android – 状态栏不透明但是白色
- temp变量this变量base变量 c# 1613715552
- python 第四天
- DevOps正在扼杀程序员?
- 河南科技大学计算机专业专升本,河南科技大学成人高考计算机应用技术专业的课程有哪些...
- 浅析.NET中的引用类型和值类型(下)
- Atitit.mysql oracle with as模式临时表模式 CTE 语句的使用,减少子查询的结构性 mssql sql server..
- OneNote | 插件/使用技巧
- 计算机软件安装包后缀名,软件安装包程序是什么
- STM32f407 DCMI方式驱动 OV2640
- win10 开热点 【服务主机:网络服务】 疯狂跑流量的解决方案 亲测有效!!!!
- 在android view中写坦克大战
- 企业级移动应用如何优化域名解析和业务访问?