zoukankan      html  css  js  c++  java
  • 如何判断一个点在某方向线的左侧还是右侧

    如何判断点在行驶方向的左侧、右侧或者路上?

    走在公路上,行驶是有方向的,那么我们可以选公路上相邻两个点,取做OA,OA两个点不能重合,否则就没法判断了,油站的点S以及S1,如下图:

    其实可以明显看出油站方向,如果油站少,我们可以人工标记,但是由于数量的问题,通过人力来处理就浪费了大量人力,财力。

    那么如何通过程序判断?

    假设

    这里首先需要做一部分假设,假设公路的上取得两个点与给的油站得点在同一个平面内,主要是地球大,取得公路两点与油站的点,可以忽略是曲面。

    高中、大学的代数知识

    其实要解决这个问题,会用到高中或者大学大一我们学过的关于向量矩阵那块的知识。现在有点久了,好多都忘记了。大学高等代数只不过涉及的纬度比多,我们这里牵涉2维,所以使用高中代数就可以解决。

    高中数学里有个向量积的知识点:如下公式,注意i,j分别是x轴,y轴的单位向量,a(x, y),b(x,y)

    其实也是右手定则。大伙可以查下右手定则,就可以判断方向了。

    解决

    现在OA可以看作是O到A的向量,OS看作是O到S的向量,如果由于我们要看S是在公路的那一侧,那么我们就是要看OAXOS的出的结果。

    代码如下:

    public class DirectionTest {
        public static void main(String[] args) {
            Point startPoint = Point.builder().x(104.069544).y(30.530316).build();
            Point endPoint = Point.builder().x(104.069603).y(30.528352).build();
     
            Point vectorRoad = getVector(startPoint, endPoint);
     
     
            Point gasStationPoint = Point.builder().x(104.068835).y(30.528935).build();
     
            Point vectorGasStation = getVector(startPoint, gasStationPoint);
     
            Double direction = vectorRoad.getX() * vectorGasStation.getY() - vectorRoad.getY() * vectorGasStation.getX();
            if (direction < 0) {
                System.out.println("在公路右侧");
            } else if (direction == 0) {
                System.out.println("在公路上");
            } else {
                System.out.println("在公路左侧");
            }
     
     
        }
     
        private static Point getVector(Point startPoint, Point endPoint) {
     
            return Point.builder().x(endPoint.getX() - startPoint.getX()).y(endPoint.getY() - startPoint.getY()).build();
     
        }
     
        @Data
        @Builder
        @AllArgsConstructor
        static class Point {
            private double x;
            private double y;
        }
    }
    

    根据右手定则结论:

    如果结果大于0,说明在行驶方左侧,

    如果等于0,说明就在线上,

    如果小于0,说明在右侧

  • 相关阅读:
    std::bind常见的坑
    valgrind使用指南
    Makefile (1) gcc基础
    准备篇(三)Makefile
    win10激活
    C语言结构体篇 结构体
    C语言字符篇(五)内存函数
    C语言字符篇(四)字符串查找函数
    C语言字符篇(三)字符串比较函数
    C语言字符篇(二)字符串处理函数
  • 原文地址:https://www.cnblogs.com/lanweijava/p/11838660.html
Copyright © 2011-2022 走看看