#
vincentlu
昨天 c5b9af0d593987156cd2f2206b15ab2992999aed
#
1个文件已修改
22 ■■■■ 已修改文件
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java
@@ -370,31 +370,41 @@
    private boolean isInsideExpandedFootprint(double px, double py, double centerX, double centerY
            , VehicleFootprint footprint, double headingRad, double buffer) {
        // 一、重置成以车辆为原点且车头为x、y正方向的坐标系
        // 向量平移,地图坐标系转到以车辆中心为原点的坐标系,使车辆中心变成新的原点(方便计算)
        double dx = px - centerX;
        double dy = py - centerY;
        // 再把坐标旋转到车辆坐标系(localX 指向车头,localY 指向车辆左侧),取消原地图的车辆旋转方向
        double localX = dx * Math.cos(headingRad) + dy * Math.sin(headingRad);
        double localY = -dx * Math.sin(headingRad) + dy * Math.cos(headingRad);
        double xMin = -footprint.getTail();
        double xMax = footprint.getHead();
        double yMin = -footprint.getHalfWidth();
        double yMax = footprint.getHalfWidth();
        // 二、车辆在自身坐标系中的矩形范围
        double xMax = footprint.getHead(); // localX方向, 向前(车头方向)是正值
        double xMin = -footprint.getTail(); // localX方向, 向后(车尾)是负值
        double excessX = 0D;
        double yMax = footprint.getHalfWidth(); // localY 方向, 左侧为正
        double yMin = -footprint.getHalfWidth(); // localY 方向, 右侧为负
        // 三、计算 点 是否在 “矩形外扩 + buffer 的区域”里
        // 计算点距离 矩形边界 的‘超出量’,落在矩形内时超出量为 0
        double excessX = 0D; // 默认 0 表示还在矩形里面
        if (localX < xMin) {
            excessX = xMin - localX;
        } else if (localX > xMax) {
            excessX = localX - xMax;
        }
        double excessY = 0D;
        double excessY = 0D; // 默认 0 表示还在矩形里面
        if (localY < yMin) {
            excessY = yMin - localY;
        } else if (localY > yMax) {
            excessY = localY - yMax;
        }
        // (excessX, excessY) 表示距离向量
        // 通过 欧氏距离平方算法, 若到矩形的最短距离不超过 buffer,说明在“车辆形状 + 缓冲半径”内
        return excessX * excessX + excessY * excessY <= buffer * buffer;
    }