//判断一个三维坐标点在不在一个面上
public class JudgeThreeDimensional {
/**
* @param pointA 传的一个三维A坐标点
* @param pointB 传的一个三维B坐## 标题标点## 标题
* @param pointP 要判断的点
* @return
*/
public static boolean judge(PointDto pointA, PointDto pointB, PointDto pointP) {
//获取最小和最大经度
float X1 = pointA.getLongitude();
float X2= pointB.getLongitude();
//获取最小和最大纬度
float Y1 = pointA.getLatitude();
float Y2 = pointB.getLatitude();
//获取最小和最大海拔
float Z1 = pointA.getAltitude();
float Z2 = pointB.getAltitude();
//经度
Float length = pointP.getLongitude();
//纬度
Float wide = pointP.getLatitude();
//海拔
Float height = pointP.getAltitude();
//假设高度相同时 经度和纬度不同
if (Z1 == Z2 && X1 != X2 && Y1 != Y2) {
if (height != Z1) {
return false;
}
//判断length和wide在不在X1和X2之间以及Y1和Y2之间
if (height == Z1&& length < Math.min(X1, X2) || length > Math.max(X1, X2)
|| wide < Math.min(Y1, Y2) || wide > Math.max(Y1, Y2)) {
return false;
}/* else {
//否则就在平面内
return true;
}*/
}
//假设高度相同 经度不同和纬度相同
if (Z1==Z2 && Y1 == Y2 && X1 != X2){
System.out.println("构不成一个面");
return false;
}
//假设高度相同 经度相同和纬度不同
if (Z1 == Z2 && X1 ==X2 && Y1 != Y2){
System.out.println("构不成一个面");
return false;
}
//假设高度相同 经度和纬度相同
if (X1==X2 &&Y1==Y2 && Z1==Z1){
System.out.println("构成一个点");
return false;
}
//假设高度不同 经度相同 和 纬度不同
if (Z1 !==Z2 && X1 == X2 &&Y1 != Y2) {
//长度与x(经度)不同,不可能在面上
if (length != X1) {
return false;
}
//长度等于x(经度)与 高度不在最小z(高度)和最大z(高度)之间 不在平面, 或 , 宽度不在最小y(纬度)和最大y(纬度)之间 不在平面
if (length == X1 && height < Math.min(Z1, Z2) || height > Math.max(Z1, Z2) ||
wide < Math.min(Y1, Y2) || wide > Math.max(Y1, Y2)) {
return false;
}/* else {
return true;
}*/
}
//假设高度不同 经度不同与纬度相同
if (Z1 != Z2&& Y1 != Y2 && X1 == X2) {
//宽度当作上面的高度
if (wide != Y1) {
System.out.println("不在平面上");
return false;
}
//宽度相等 长度不在最小x和最大x之间,不在平面上 或 高度不在最大z和最小z之间,不在平面上
if (wide == Y1 && Math.min(X1, X2) > length || length > Math.max(X1, X2) ||
Math.min(Z1, Z2) > height || Math.max(Z1, Z2) < height) {
return false;
}/* else {
return true;
}*/
}
//假设高度、经度、纬度不同
if (Z1 !==Z2 && X1 != X2 && Y1 != Y2) {
//判断高度点在不在两个点中的最低高度和最高高度之间
if (height > Math.max(Z1, Z2) || height < Math.min(Z1, Z2)) {
return false;
}
//高度在最大z(高度)和最小z(高度)之间与 长度不在最小x(经度)和最大x(经度)之间 不在平面上, 或 宽度不在最小y(宽度)
// 和最大y(宽度)之间 不在平面上
if (height <= Math.max(Z1, Z2) && height >= Math.min(Z1, Z2) && length < Math.min(X1, X2) ||
length > Math.max(X1, X2) || wide < Math.min(Y1, Y2) || wide > Math.max(Y1, Y2)) {
return false;
} /*else {
return true;
}*/
}
return true;
}
}