欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

判断一个三维坐标点在不在一个面上,不确定有没有问题

程序员文章站 2024-03-01 17:14:52
...

//判断一个三维坐标点在不在一个面上
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;

}

}

关于一个三维坐标在不在一个平面上判断

相关标签: java