用圆形雷达数学方法表示点

2024-05-08

我正在编写一个简单的应用程序,它可以向您显示您周围的朋友,但不是在法线地图中,而是在像 UI 这样的真正圆形雷达上:

[Imgur](https://i.stack.imgur.com/Au3IP.png https://i.stack.imgur.com/Au3IP.png)

像这样,我有每个用户的纬度、经度,当然还有我自己的中心。

我还测量每个用户的距离来定位他们,所以我知道的数据是他们的纬度、经度和到我的距离。

出于数学原因,假设雷达的半径为 100 像素,我可以使用左侧或右侧定位将它们与我的距离分开,但就顶部或底部而言,它会变得有点棘手,因为我尝试转换它们的纬度 - 我的纬度转化为百分比结果,然后将它们放在雷达上......但我认为极坐标到笛卡尔坐标可能有更好的方法,但我真的有点无能为力。

对于这些类型的接口或周围实现的任何东西是否有最好的方法?


  1. 将所有点的长、纬度转换为笛卡尔 3D 空间坐标

    它是转换球面 -> 笛卡尔 3D 空间。后面的数学是here http://en.wikipedia.org/wiki/Spherical_coordinate_system。在此之后所有点(long,lat,alt)将成为(x,y,z) where (0,0,0)是 的中心Earth

    • X轴是lat=0,long=0 [rad]
    • Y轴是lat=0,long=+PI/2 [rad]
    • Z轴为北
    • XY平面是赤道

    如果你想要更精准的手柄Earth作为椭球体而不是球体

    long = <     0 , +2*PI > [rad]
    lat  = < -PI/2 , +PI/2 > [rad]
    alt  = altitude above sea level [m]
    Re =6378141.4; [m]
    Rp =6356755.0; [m]
    
    R=alt+sqrt( (Re*cos(lat))^2 + (Rp*sin(lat))^2 )
    x=R*cos(lat)*cos(long)
    y=R*cos(lat)*sin(long)
    z=R*sin(lat)
    
  2. 创建 RADAR 局部笛卡尔坐标系

    基本上你需要获得 3D 矢量X,Y,Z轴。它们必须相互垂直并指向正确的方向RADAR原点(P0).

    您可以为此使用向量乘法,因为它会创建与其乘数垂直的向量。方向取决于乘数的顺序,因此请进行一些实验。

    //altitude this one is easy
    Z = P0
    //north (chose one that is non zero, resp. bigger to avoid accuracy problems)
    X = (1,0,0) x Z // old X axis * Altitude
    X = (0,1,0) x Z // old Y axis * Altitude
    //east is now also easy
    Y = X x Z 
    // now normalize all of them to unit vectors
    X = X / |X|
    Y = Y / |Y|
    Z = Z / |Z|
    // and check if they are not negative (X,Y)
    // if they are then swap multiplicants or multiply by -1
    // do not forget that X is computed by two methods so swap the correct one
    
    • here https://stackoverflow.com/a/21100338/2521214构建 4x4 变换矩阵背后的数学原理
    • here https://stackoverflow.com/a/21611264/2521214您可以在图像上看到同质 4x4 和直接 3x3 3D 变换矩阵和数学之间的差异
  3. 将所有点转换为 RADAR 坐标系

    只需将所有点乘以RADAR变换矩阵M

    Q(i) = P(i)*M
    

    所以要点Q(i)现在是本地的RADAR

    • (0,0,0)表示雷达原点(中心)
    • (1,0,0)指向北
    • (0,1,0)指向东
    • (0,0,1)点向上

    所以现在只需将所有坐标乘以RADAR scale

    scale = RADAR_radius/RADAR_range;
    
    • RADAR_radius是你的尺寸RADAR在屏幕上以像素或坐标为单位
    • RADAR_range是最大距离RADAR最大的圆代表[m]

    之后只需将点画到RADAR (swap x,y因为我用X北非Y)并且您还可以丢弃所有距离比范围更远的点。您还可以添加 3DRADAR就像在旧的精英中一样,添加Z坐标到垂直轴(或画一条 L 线)

希望它能有所帮助,并且不会太令人困惑......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用圆形雷达数学方法表示点 的相关文章

随机推荐

  • 停止/终止按消耗计划运行实例的 Azure Functions

    如何在消耗计划 以前称为动态计划 上终止 azure 函数可运行实例 执行 我正在运行时版本 1 0 上运行 azure 函数 很少有 一些未显示在下面屏幕截图的日志中 运行时间超过了五分钟函数超时阈值 检查具有 DOTTED 状态的 然而
  • 如何使用 itext 在 pdf 页脚上添加页码,它应该照顾其宽度?

    我的代码示例如下 Override public void onEndPage PdfWriter writer Document document addFooter writer private void addFooter PdfWr
  • 在 Blazor 中以编程方式注册页面,而不是使用 LazyAssemblyLoader 使用 @page 指令

    目前我加载程序集OnNavigateAsync包含带有 page 指令的 Razor 页面的事件 例如 page extrapage 并且工作正常 例如 我想以编程方式声明路由页面 而不声明 page并且 代替这个 使用Dictionary
  • Django,无法分配 None,不允许空值

    我有这个模型 py import datetime from django db import models from tinymce import models as tinymce models from filebrowser fie
  • 如何将 MouseDown 事件放入样式中?

    这有效 XAML
  • 如何返回以列名作为第一行的 T-SQL 查询

    我正在编写一个 SSIS 包来将数据从 SQL Server 2012 数据库输出到 CSV为客户归档 要求是第一行是列名称 下面是我为数据流任务中的源编写的查询 问题是 它总是将列名返回为最后一行 而不是第一行 为什么 我该如何实现这一目
  • ByteBuddy 变基、合成类型和 OSGi

    我为 byte buddy 开发了以下拦截器 public class SecurityInterceptor RuntimeType public static Object intercept SuperCall Callable su
  • 带有 Angular2+ 的 dc.js 图表

    有人将 dc js 与 Angular2 应用程序一起使用过吗 任何帮助或指示将不胜感激 我能够使我的应用程序在正常的 html java 脚本上运行 现在我需要在 Angular 2 应用程序中实现相同的功能 Edit 几周后 我有了更好
  • 在同一项目上使用 Eclipse 和 NetBeans

    Eclipse 是一个非常棒的编辑器 我更喜欢使用它 但是缺少 Eclipse 的 GUI 设计工具 另一方面 NetBeans 非常适合 GUI 设计 在同一项目中使用 NetBeans 进行 GUI 设计和 Eclipse 进行其他所有
  • 使用 JSON.NET 反序列化一些 JSON

    我对 JSON 非常陌生 我需要解析 API 提供的一些内容 谷歌快速搜索出现了JSON NET http james newtonking com pages json net aspx 所以我现在尝试使用它将此 JSON 解析为列表对象
  • 处理带有两个片段的操作栏

    我有一个包含两个片段的布局 两个片段都有自己的操作栏 每个操作栏都有自己的操作项和菜单 当我的应用程序处于横向模式并且两个片段都显示在屏幕上时 看起来框架正在选择在 右侧 或第二个片段 显示操作栏 这意味着左侧的片段 第一个片段 缺少其操作
  • Rails 和 Mysql 的毫秒数

    使用 Rails Mysql 时存储时间 以毫秒为单位 的最佳方式是什么 我将使用小数和composed of 以便能够将该值作为Ruby 时间进行操作 有人有更好的主意吗 自从提出这个问题以来 已经过去了好几年了 这是更新的解决方案 ht
  • 如何:SQL 还是 NOSQL?

    我还没有遇到过这个问题 但这就是我的想法 非常肤浅和简单化恕我直言 如果您有键值类型的存储 并且所有访问都是键查找 请使用 NOSQL 解决方案 如果您想要基于值 和子值 进行查找或者有一些更复杂的东西 例如联接 您会选择关系解决方案 事务
  • 改造中的 SocketTimeoutException

    我在尝试着POST向服务器请求获取数据但有时会发生SocketTimeoutException I used Ok3Client解决它 但我面临同样的异常 我该如何解决它 我的代码如下 public void getNormalLogin
  • 如何将 rubocop 与 Rake 集成?

    rubocop https github com bbatsov rubocop是 Ruby 的代码风格检查器 与 rubocop 类似的工具 Cane 可以与 Rake 集成 https github com square cane in
  • 让 hashchange 事件在所有浏览器(包括 IE7)中工作

    我有一些代码 由另一位开发人员编写 在 WordPress 内部进行 AJAX 页面加载 例如 没有页面重新加载 当您单击导航项时 AJAX 会刷新主要内容区域 我的问题是它在 IE7 中被破坏了 我不知道从哪里开始调试 最初的开场白是 v
  • 需要帮助通过批处理文件添加注册表项

    我正在尝试通过cmd添加以下注册表项 我无法让其他用户能够使用以下命令添加此注册表项regedit exe s Location Project reg HKEY CURRENT USER Software Autodesk Fabrica
  • 如何从 Python 脚本捕获 Curl 的输出

    我想使用curl查找有关网页的信息 但在Python中 到目前为止我有这个 os system curl head www google com 如果我运行它 它会打印出 HTTP 1 1 200 OK Date Sun 15 Apr 20
  • 更改内置颜色

    我只是想问如何更改 Angular 2 材质中的这些内置颜色 它在 ng2 material 文档中指定 color primary accent warn 如何更改这些调色板中的颜色 或者甚至如何改变文本的蓝色 我已经尝试过这个但行不通
  • 用圆形雷达数学方法表示点

    我正在编写一个简单的应用程序 它可以向您显示您周围的朋友 但不是在法线地图中 而是在像 UI 这样的真正圆形雷达上 https i stack imgur com Au3IP png https i stack imgur com Au3I