Java 开发之 根据坐标计算长度、角度、位置等数据
- 坐标计算 其实也相当于再做三角运算, 每一个坐标在坐标图中都可视作三角形的一个顶角

- 有了这张图, 大家就能清晰的想象出一个三角形,然后根据三角函数进行相关的计算
- 如果有不了解三角函数算法的可以看看本人汇总的几个三角算法文章《Java开发 三角形算法汇总》,本文的算法中也使用了该文章的算法
两点之间的长度
/**
* 两点之间的长度
* @param point0 坐标
* @param point1 坐标
* @return
*/
public static double getLengthOfSide(Point point0, Point point1){
return Math.sqrt(Math.pow((point0.x-point1.x),2)+Math.pow((point0.y-point1.y),2));
}
根据坐标 获取角度
/**
* 根据坐标 获取角度
* @param point0 坐标
* @param degreePoint 坐标 获取该点的角度
* @param point2 坐标
* @return
*/
public static int getDegree(Point point0, Point degreePoint, Point point2) {
//向量的点乘
int vector = (point0.x - degreePoint.x) * (point2.x - degreePoint.x) + (point0.y - degreePoint.y) * (point2.y - degreePoint.y);
//向量的模乘
double sqrt = Math.sqrt(
(Math.abs((point0.x - degreePoint.x) * (point0.x - degreePoint.x)) + Math.abs((point0.y - degreePoint.y) * (point0.y - degreePoint.y)))
* (Math.abs((point2.x - degreePoint.x) * (point2.x - degreePoint.x)) + Math.abs((point2.y - degreePoint.y) * (point2.y - degreePoint.y)))
);
//反余弦计算弧度
double radian = Math.acos(vector / sqrt);
//弧度转角度制
return (int) (180 * radian / Math.PI);
}
/**
* 根据坐标 获取角度
* @param pA 坐标
* @param degreePoint 坐标 获取该点的角度
* @param pC 坐标
* @return
*/
public static double getDegree2(Point pA, Point degreePoint, Point pC) {
double a = getLengthOfSide(pA,degreePoint),b = getLengthOfSide(pC,degreePoint),c = getLengthOfSide(pA,pC);
return getDegree(a,b,c);
}
/**
* 已知边长 求AC 角度
* @param a
* @param b
* @param c
* @return
*/
public static double getDegree(double a,double b,double c){
// 计算弧度表示的角
double degrees = Math.acos((a*a + b*b -c*c)/(2.0*a*b));
// 用角度表示的角
return Math.toDegrees(degrees);
}
根据角度和边长获取位置
/**
* 根据角度和边长获取位置
* @param p 起点位置
* @param degree 角度
* @param width 边长
* @return 位置
*/
public static double[] getPoint(Point p,double degree,double width){
int v = (int) (degree / 90);
double d = (degree % 90);
double side = getRightSideFromDegree(d, width);//与中心的直角边长
double top = getRightSideFromLength(side, width);//另一直角边
double x = 0 , y = 0 ;
switch (v){
case 0:
x = (p.x+top);
y = (p.y-side);
break;
case 1:
x = (p.x+side);
y = (p.y+top);
break;
case 2:
x = (p.x-top);
y = (p.y+side);
break;
case 3:
x = (p.x-side);
y = (p.y-top);
break;
}
return new double[]{x,y};
}
最后推荐一个我自己写的MVVM开源项目《Open MVVM》
有问题请私信,留言,或者发送邮件到我扣扣邮箱 qingingrunt2010

本文介绍如何利用Java进行坐标计算,包括两点间距离、角度获取及根据角度和边长确定位置的方法,并提供了具体实现代码。

821

被折叠的 条评论
为什么被折叠?



