精华内容
下载资源
问答
  • 根据个坐标计算相对角度

    千次阅读 2020-08-18 16:28:13
    根据两个坐标点计算相对角度 在二维坐标系中,已知A点(xA,yA),B点(xB,yB),计算两点相对角度。 Math.atan2(yA-yB,xA-xB)*(180/Math.PI); 所得结果在±180°之内。

    根据两个坐标点计算相对角度

    在二维坐标系中,已知A点(xA,yA),B点(xB,yB),计算两点相对角度。

    Math.atan2(yA-yB,xA-xB)*(180/Math.PI);

    所得结果在±180°之内。

    展开全文
  • 八方向坐标的游戏地图中,怪物( pos1 )要向玩家( pos2 )发起技能攻击的时候,需要...下面我们来看一段 秦美人实现的判断个坐标相对方向的代码:  double angle = Math. atan ((( double ) (pos2.getY

    八方向坐标的游戏地图中,怪物( pos1 )要向玩家( pos2 )发起技能攻击的时候,需要计算出玩家 ( pos2 ) 相对于怪物 ( pos1 ) 所处的方向才能使技能正确攻击到玩家。下面我们来看一段 秦美人实现的判断两个坐标相对方向的代码:

                         double   angle = Math.  atan ((( double ) (pos2.getY() – pos1.getY())) / -(pos2.getX() – pos1.getX()));

                         double   angle22d5 = Math.   PI   / 8;

                         double   angle67d5 = Math.   PI   / 2 – angle22d5;

                         if   (angle > -angle22d5 && angle <= angle22d5) {

                               if   (pos1.getX() < pos2.getX()) {

                                     return   2;

                            }   else   {

                                     return   6;

                            }

                      }   else   if   (angle > angle22d5 && angle <= angle67d5) {

                               if   (pos1.getX() < pos2.getX()) {

                                     return   1;

                            }   else   {

                                     return   5;

                            }

                      }   else   if   (angle > -angle67d5 && angle <= -angle22d5) {

                               if   (pos1.getX() < pos2.getX()) {

                                     return   3;

                            }   else   {

                                     return   7;

                            }

                      }   else   {

                               if   (pos1.getY() < pos2.getY()) {

                                     return   4;

                            }   else   {

                                     return   0;

                            }

                      }

    首先第一行   double   angle = Math.  atan ((( double ) (pos2.getY() – pos1.getY())) / -(pos2.getX() – pos1.getX())),这是计算玩家 ( pos2 ) 与怪物 ( pos1 ) 两点直线与x轴正方向的夹角弧度值,atan()中的参数 是计算两点直线的一个斜率( 直线斜率公式:k= ),公式中的负号是作了笛卡儿坐标系统对计算机屏幕坐标系统的坐标转换。

    笛卡儿坐标系统中x轴向右为正值,y轴向上为正值;计算机屏幕坐标系统中因为起点在屏幕左上角,虽然x轴同样向右是正值,而y轴却是向下为正值。上图是将 红色坐标(笛卡儿坐标系统)转换为 绿色坐标 (计算机屏幕坐标系统)的过程。

    附:同 atan等价的 atan2 弧度计算公式: Math.  atan2 ((( double ) (pos2.getY() – pos1.getY())), ( double ) (pos2.getX() – pos1.getX()))

     

    如上图所示两个方向之间的夹角是45度,每个方向占有区域范围也是45度(分别共享相邻两个方向间夹角的一半)。 代码中的 double   angle22d5 = Math.   PI   / 8是计算坐标系中22.5度角的弧度值,等价于 22.5 * Math.   PI   /180 , double   angle67d5 = Math.   PI   / 2 – angle22d5即是计算 坐标系中67.5度角的弧度值,现在通过计算好的玩家( pos2 )相对于怪物( pos1 )两点直线与x轴正方向的夹角弧度和x座标的相对位置,就可以判断玩家( pos2 )相对于怪物( pos1 )正确方向了。

    PS:要感谢一下我们的数学教父(肥皂哥)提供的数学支持!

    展开全文
  • 查询之后发现国内的博客基本都是计算两点距离,计算点到线距离的距离等,有几篇也都是C语言形式,这里自己写一下,以作记录。 文章参考文档: 谷歌讨论版关于这个问题的问答 具体函数的网页 具体实现 需求 通过已知...

    问题背景:自己在使用高德地图时没有发现通过已知点经纬度,角度,距离计算另一点经纬度的方法,所以只好自己实现了。查询之后发现国内的博客基本都是计算两点距离,计算点到线距离的距离等,有几篇也都是C语言形式,这里自己写一下,以作记录。
    文章参考文档:
    谷歌讨论版关于这个问题的问答
    具体函数的网页

    具体实现

    需求

    通过已知点的经纬度,相对角度,距离计算另一点的经纬度

    实现逻辑

    注意:所有这些形式都是基于球形地球的计算(忽略椭球效应) - 这对于大多数目的而言足够准确 [事实上,地球是非常略微椭圆形的; 使用球形模型时,误差通常高达0.3%
    如果需要精确,那么可能这个方法不适用
    *

    需要参数

    1. 起始点位置经纬度,十进制;double longitude,double latitude
    2. 距离(单位千米);double distance
    3. 角度从正北方开始到目标点的角度;double angle

    公式

    纬度:φ2 = asin( sin φ1 ⋅ cos δ + cos φ1 ⋅ sin δ ⋅ cos θ )
    经度:λ2 = λ1 + atan2( sin θ ⋅ sin δ ⋅ cos φ1, cos δ − sin φ1 ⋅ sin φ2 )
    以上公式中的经纬度都需要转换成弧度radian

    1. λ2结果经度
    2. λ1起始经度
    3. φ2结果纬度
    4. φ1结果纬度
    5. θ角度,从北方顺时针方向
    6. R地球半径
    7. δ表示角距离,即d/R
    8. d距离(km)

    带入数据,可以得到方法

    /** 地球半径 **/
      private static final double R = 6371e3;
      /** 180° **/
      private static final DecimalFormat df = new DecimalFormat("0.000000");
    
      /**
       * 根据一点的坐标与距离,以及方向,计算另外一点的位置
       * @param angle 角度,从正北顺时针方向开始计算
       * @param startLong 起始点经度
       * @param startLat 起始点纬度
       * @param distance 距离,单位m
       * @return
       */
      public static String[] calLocationByDistanceAndLocationAndDirection(double angle, double startLong,double startLat, double distance){
        String[] result = new String[2];
        //将距离转换成经度的计算公式
        double δ = distance/R;
        // 转换为radian,否则结果会不正确
        angle = Math.toRadians(angle);
        startLong = Math.toRadians(startLong);
        startLat = Math.toRadians(startLat);
        double lat = Math.asin(Math.sin(startLat)*Math.cos(δ)+Math.cos(startLat)*Math.sin(δ)*Math.cos(angle));
        double lon = startLong + Math.atan2(Math.sin(angle)*Math.sin(δ)*Math.cos(startLat),Math.cos(δ)-Math.sin(startLat)*Math.sin(lat));
        // 转为正常的10进制经纬度
        lon = Math.toDegrees(lon);
        lat = Math.toDegrees(lat);
        result[0] = df.format(lon);
        result[1] = df.format(lat);
        return result;
      }
    
      public static void main(String[] args) {
        String[] result = calLocationByDistanceAndLocationAndDirection(0,119.010212,32.147982, 100);
        String[] result2 = calLocationByDistanceAndLocationAndDirection(90,119.010212,32.147982, 100);
        String[] result3 = calLocationByDistanceAndLocationAndDirection(180,119.010212,32.147982, 100);
        System.out.print(result[0]+",");
        System.out.println(result[1]);
        System.out.print(result2[0]+",");
        System.out.println(result2[1]);
        System.out.print(result3[0]+",");
        System.out.println(result3[1]);
      }
    

    图片示意
    这里当然有一些误差,但是因为此项目仅需要大概位置,所以仅需要做到这一步就可以了,如果需要十分精确的话可能需要现在平面坐标系中计算后再转换为经纬度坐标?这里先不做讨论,如果以后需要,再做补充。
    如果文中存在错误,希望各位大佬斧正,感谢!

    展开全文
  • 根据两点经纬度计算距离和角度——java实现

    原理:见上一篇博客   http://blog.csdn.net/xiaobai091220106/article/details/50879365

    百度地图拾取经纬度坐标http://api.map.baidu.com/lbsapi/getpoint/index.html

    1.distance

    /**
         * 
         * @param long1 经度1
         * @param lat1 维度1
         * @param long2 经度2
         * @param lat2 纬度2
         * @return
         */
        public static double getDistance(double long1, double lat1, double long2,
                                      double lat2) {
            double a, b, R;
            R = 6378137; // 地球半径
            lat1 = lat1 * Math.PI / 180.0;
            lat2 = lat2 * Math.PI / 180.0;
            a = lat1 - lat2;
            b = (long1 - long2) * Math.PI / 180.0;
            double d;
            double sa2, sb2;
            sa2 = Math.sin(a / 2.0);
            sb2 = Math.sin(b / 2.0);
            d = 2 * R * Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(lat1) * Math.cos(lat2) * sb2 * sb2));
            return d;
        }
    

    2.bearing


    /**
         *
         * @param lat_a 纬度1
         * @param lng_a 经度1
         * @param lat_b 纬度2
         * @param lng_b 经度2
         * @return
         */
        private  double getAngle1(double lat_a, double lng_a, double lat_b, double lng_b) {
    
            double y = Math.sin(lng_b-lng_a) * Math.cos(lat_b);
            double x = Math.cos(lat_a)*Math.sin(lat_b) - Math.sin(lat_a)*Math.cos(lat_b)*Math.cos(lng_b-lng_a);
            double brng = Math.atan2(y, x);
    
            brng = Math.toDegrees(brng);
            if(brng < 0)
                brng = brng +360;
            return brng;
    
        }
    



    展开全文
  • 需求: 已知一个向量,初始位置在y轴方向,如图红色箭头,绕中心(x1, y1)旋转若干角度后,到达Line(x2,y2 x1,y1)的位置,求旋转角度 分析: 坐标(x1, y1)(x2, y2)已知,则可利用JavaScript反三角函数求...
  • 已知两点经纬度坐标求角度

    千次阅读 2021-01-26 18:51:05
    * 已知x y坐标计算角度 * @param x * @param y * @return */ public static double getAngle(double x, double y) { double l = Math.sqrt(x * x + y * y); double a = Math.acos(x / l); double ret = a *...
  • 如上图所示,我们已经知道A(Lng1,Lat1)和B(Lng2,Lat2)的经纬度,所以有 ∠AOE =Lat1, ∠BOF=Lat2, ∠EOF=Lng2-Lng1.现在我们要求B相对于A方位角,等价于求二面角C-OA-B. 首先我们先求∠AOB.由三面角余弦定理...
  • 两点间方位角计算

    千次阅读 2020-06-08 13:15:55
    2经纬度计算方位,先计算二者的方位角度:该方法得出方位是A相对于B的逆时针方向 ///<summary> ///根据经纬度计算角度 ///</summary> ///<paramname="lat1"></param> ///<param...
  • 主要是利用个向量的数量积及向量积的知识。编程语言Python #tvet_ang函数名的意思:t:2,代表二元向量;vet:向量的缩写;ang:角度的缩写。 #函数参数为个向量A,B;返回值为元组;元组第一项A,B之间角度...
  • 我们通过两点之间的经纬度,可以知道两点之间大致的夹角是多少度(相对地心来说)。这个可以通过勾股定理大致求得,当然这样求出来的角度不是很准,但足够用了。 可以通过下列式子计算两点之间的夹角。x1,y1为第一个...
  • Lua求两点之间夹角

    千次阅读 2018-01-04 17:34:53
    Lua求2个点之间夹角: function getAngleByPos(p1,p2) local p = {} p.x = p2.x - p1.x p.y = p2.y - p1.y local r = math.atan2(p.y,p.x)*180/math.pi print("夹角[-1
  • // 计算A点相对B的坐标A1 var A1 = Cesium.Cartesian3.subtract(A, B, new Cesium.Cartesian3()); //对A1应用旋转矩阵 var p = Cesium.Matrix4.multiplyByPoint(m4, A1, new Cesium.Cartesian3()); // 新的A的...
  • MATLAB实现地球表面上两点之间的仰角和方位角计算

    千次阅读 热门讨论 2020-09-11 14:52:26
    背景:个天线分别坐落在个山头上(或者其他什么地方均可,中间要保证无阻碍物),它们的波束角度都很小,大概为一度,且相距很远(几十公里),无法直接用望远镜观察位置来手动调整,因此需要通过计算调整各自的...
  • 可以使用 Point 类的 distance() 方法确定坐标空间两点之间的距离。例如,下面的代码确定同一显示对象容器中两个显示对象(circle1 和 circle2)的注册点之间的距离: import flash.geom.*; var pt1:Point = new ...
  • 根据两点的经纬度求方位角和距离

    万次阅读 多人点赞 2018-04-17 14:43:58
    这里主要解决四个问题:1、已知两点经纬度,求两点间距离;2、已知两点经纬度,求一点相对于另一点航向;3、已知一点经纬度及与另一点距离和航向,求另一点经纬度;总声明:因为地球偏心率极低,所以此处将地球看做...
  • 两点生成曲线

    千次阅读 2018-01-22 20:38:43
    看了标题的人可能会有这样的反应:两点不是能确定无限条曲线吗,这不是扯淡吗。。其实现在的需求是这样的:在一个游戏里,我们需要根据起点和落点生成一条看上去合理的曲线运动轨迹。在我的想象中,它至少应该是往...
  • 根据两点经纬度坐标计算距离

    万次阅读 多人点赞 2015-05-09 11:23:29
    问题提出目前手头的一个项目要用到GPS地理定位信息,很自然的就需要知道个地点之间的距离,于是上网找了一下。背景知识这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球...
  • 已知两点经纬度 计算距离和方位角(MATLAB实现)

    千次阅读 热门讨论 2020-08-10 20:42:38
    1.已知两点经纬度表示,计算两点间距离以及方位角(近似两点连线的航向角) 2. 已知一个基准点,另一个点距离基准点的距离和初始方位角,计算另一个点的经纬坐标。 % Algorithm Studio % Author : Cl
  • 已知两点经纬度,求两点间距离; 已知两点经纬度,求一点相对于另一点航向; 已知一点经纬度及与另一点距离和航向,求另一点经纬度; 总声明: 因为地球偏心率极低,所以此处将地球看做球体,以下所有公式在适用...
  • 原文地址:根据两点的经纬度求方位角和距离,等作者:多乎哉不多也多亦不多乎实乃少也 最近自己做的一个小东西要用到经纬度方面的计算,查遍中文网页见到的要么基本上是一帮惜字如金装大爷的“砖家”,要么就是像...
  • JAVA计算两点连线与水平线夹角 package com.utils; /** * Created * Data: 2020/4/20. * Description: */ public class AngleUtils { public static int calAngle(double x1, double y1, double x2, double...
  • 大致地说,这里实现的方法就是通过将经纬坐标转换为三维的以球心为原点的立体坐标计算地球表面两点之间的距离长度。 地理空间距离计算优化—美团技术团队 function [x y z] = LL2era(lon,lat) %函数实现将经纬度坐标...
  • java计算个经纬度相对的方向角

    千次阅读 2015-09-18 11:38:55
     * \return AB角度  */  public static double angle(JWD A, JWD B)  {  double dx = (B.m_RadLo - A.m_RadLo) * A.Ed;  double dy = (B.m_RadLa - A.m_RadLa) * A.Ec;...
  • // 角度转换为弧度   ew1 = lon1 * DEF_PI180;   ns1 = lat1 * DEF_PI180;   ew2 = lon2 * DEF_PI180;   ns2 = lat2 * DEF_PI180;   // 经度差   dew = ew1 - ew2; ...
  • 《高斯核函数的两点性质》

    万次阅读 2014-03-15 10:18:23
    高斯核函数的两点性质  高斯核函数 K(x,y)=exp(-||x-y||2/2σ2) 在选择核函数时,若对给出的数据没有先验知识,RBF核就是最好的选择。为了研究为什么使用了核技巧的学习机器往往具有良好的推广能力,文献[1]...
  • 确定逆向地理编码时服务商对地址的方位没有清楚的描述,导致偏远的地区没有明确的描述,此算法通过个坐标的相对位置计算出了方位角得到方位,可以清楚的描述 A地址距离B地址南北方向5000米,类似这样的说明。...
  • 夹角示意图说明: ...# 个经纬度之间的距离 def LatLng2Dist(LatZero,LngZero,Lat,Lng): ra = 6378140 # radius of equator: meter rb = 6356755 # radius of polar: meter flatten = (ra - rb) / ra # Parti
  • 最近在做一个连线游戏时,用到了计算两点之间角度,如何计算任意两点直线的倾斜角呢?只需要将两点x,y坐标分别相减得到一个新的x,y轴距离(x2-x1,y2-y1).然后利用它求出角度就可以了。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 176,747
精华内容 70,698
关键字:

两点之间相对角度