鸟瞰图或地图 2.5D 渲染存在问题

2023-12-11

我正在开发一个路线规划导航软件,我正在使用以下解决方案将我的道路线变成 2.5D 或 3D 视图

使用 C# 从线条绘制 2.5D 或 3D 地图

然而,上面的解决方案对于视口内 0 height 或 x > width,然后上述解决方案变得疯狂。谁能帮我弄清楚如何解决这个问题吗?

vvvv 带3D算法vvvv

alt text

.

vvvv 无 3D 算法 vvvv

alt text

更新:: 使用此代码后

double x = p->x();
double y = p->y();

double t = -0.5;
x = x - w / 2;
y = y - h / 2;
double a = h / (h + y* sin(t));
double u = a * x + w / 2;
double v = a * y * cos(t) + h / 2;

p->setX(u);
p->setY(v);
return p;

The map become like following alt text

我认为当 Y 计算远远超出负值时,它们就会出现问题。我正在使用 Qt,并且 Qt 渲染器的线裂纹似乎是错误,与我们原来的问题无关。


问题在于您使用的转换不会将直线映射到直线。相反,直线通常会走向抛物线。您可以在示例图像中看到,2D 视图中从上到下或多或少笔直的主干道在 2.5D 视图中转换为弯曲的道路。如果您将示例中“疯狂”的行分成更短的段,您会看到同样的情况。

从数学上讲,您可以通过返回到您正在使用的转换来了解发生了什么:

x_ = (x - w/2)*(t1+(y/h)*(t2-t1)) + w/2
y_ = y

如果我们将一条直线表示为x = ay+b,然后一个点(ay+b,y)这条线上映射到(ay+b - w/2)*(t1+(y/h)*(t2-t1)) + w/2,y)。这个表达式看起来很复杂,但你可以看到它的计算结果类似于(c*y^2+d*y+e,y),对于合适的值c,d,e,这是一条抛物线。

所以你最好的选择是放弃这种转换并切换到透视变换.

在您最初的问题中,您提到渲染图像的非仿射变换太慢。看来您现在已经切换到在渲染线条之前转换线条,而且速度足够快。您现在唯一要做的就是更改变换。

这是建议的转换。这需要几个步骤,并将 2D (x,y) 坐标转换为 2.5D (u,v) 坐标。我假设您使用的是 C#。

t = 0.3 // tilt angle - try different values    
X = x - w/2 ;
Y = y - h/2 ;
a = h/(h + Y*Math.Sin(t)) ;
u = a*X + w/2 ;
v = a*Y*Math.Cos(t) + h/2 ;

有一个参数t这里定义倾斜量,以弧度表示。我建议使用 0.3 左右的值(正负)。

我已经用铅笔和纸解决了这个问题,但没有运行它,所以如果这不起作用,请告诉我......总是有可能存在转录错误。

Update:您希望避免绘制任何具有点的实体(线、多边形等)(x,y)这样a是非正数。更好的是,为了避免溢出,您应该避免在以下情况下绘制a<epsilon, where epsilon是一些小的正值,例如 0.05 或 0.1。

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

鸟瞰图或地图 2.5D 渲染存在问题 的相关文章

  • 在地图上使用 find

    如何使用 find 和 aconst iterator如果你有一个地图定义为 typedef std pair
  • 将列表字典扁平化为数据框

    我有一个列表字典说 data a 80 130 b 64 c 58 80 如何将其展平并将其转换为数据框 如下所示 扁平化字典的一种选择是 flattened data k str i x for k v in data items for
  • 为什么在读取字典时要锁定

    我对我正在阅读的一本关于线程的书 C 3 in a Nutshell 中的代码列表感到困惑 在 应用程序服务器中的线程安全 主题中 给出了以下代码作为 UserCache 的示例 static class UserCache static
  • 按降序排序映射java8 [重复]

    这个问题在这里已经有答案了 private static
  • Groovy - 在对象实例化期间忽略映射中的额外属性

    有没有办法让 groovy 在对象实例化期间忽略映射中的额外属性 例子 class Banana String name def params name someGuy age 13 new Banana params 在这个例子中 gro
  • 使用 for 循环填充 python 字典列表

    我试图用 for 循环填充字典列表 但最终结果显示 for 循环填充的最后一个字典覆盖了所有先前字典的值 我尝试调整以下中提出的解决方案 如何使用循环填充 Python 字典 https stackoverflow com question
  • Python 中使用 geoJSON 绘制多边形中的点

    我有一个包含大量多边形 特别是人口普查区 的 geoJSON 数据库 并且有很多长的纬度点 我希望存在一个有效的 Python 代码来识别给定坐标位于哪个人口普查区 但是到目前为止我的谷歌搜索还没有透露任何信息 Thanks 我发现了一个有
  • Map.Entry 的比较器

    我有一个以枚举类型作为键 以 Double 作为值的 Map 我想根据 Double 值对其进行排序 所以我得到了条目集并想使用Collections sort 与比较器 我有以下比较器代码 class ScoreComparator
  • 以有效的方式从 Map 中删除多个键?

    我有一个Map
  • R Leaflet Legend:colorBin-删除中断之间的小数

    我正在使用 Leaflet 库在 R 中创建交互式 HTML 地图 传说中采用的是colorBin用于创建将数据分为 6 个类别的方法 使用min values and max values 我已经定义了美国社区调查收入数据的特定范围可能落
  • 用 tkinter 画圆更简单的方法?

    在a上画一个圆tkinter Canvas通常由create oval方法 然而 提供边界框通常是绘制圆的一种令人困惑的方式 想出一个捷径并不是特别困难 但我找不到其他人在做类似的事情 所以我将其发布 希望其他人发现它有用 这是一个称为猴子
  • C# 中字典的内存使用情况

    我有一些代码添加了嵌套字典 格式如下 Dictionary
  • 运行时异常:java.lang.NoSuchMethodException:tfidf$Reduce.()

    如何解决这个问题 tfidf是我的主类 为什么运行jar文件后会出现这个错误 java lang RuntimeException java lang NoSuchMethodException tfidf Reduce
  • 如何在 Swift 中获取字典中最后输入的值?

    如何获取 Swift 字典中最后输入的值 例如 我如何从下面获取值 CCC var dictionary Dictionary
  • 如何在 Visual Studio 中将源附加到引用的程序集

    我对 Visual Studio 相当陌生 之前是在 Eclipse 上进行 Java 开发 我非常怀念 Eclipse 的其他功能之一是查看二进制程序集源的能力 在 Eclipse 中 我可以附加对引用 jar 的源代码的引用 之后导航到
  • 多重映射的每个元素是否都包含键和值?

    我无法想象没有人问过这个问题 但我没有运气找到它 a 的每个元素是否multimap包含它的价值and它的钥匙 这就是a的内部结构multimap看起来更像这样 map
  • 在按钮之间添加空间?

    嗨 我这里有一个代码 除了一件事之外 一切都很完美 代码中每个按钮之间没有空格 我尝试过 margin 但不幸的是它是一个无序列表 所以我有点困惑 我将添加或替换什么以在两个按钮之间留出空间 帮助
  • Python:在字典中查找具有唯一值的键?

    我收到一个字典作为输入 并且想要返回一个键列表 其中字典值在该字典的范围内是唯一的 我将用一个例子来澄清 假设我的输入是字典 a 构造如下 a dict a cat 1 a fish 1 a dog 2 lt unique a bat 3
  • 如何在Android地图上更改位置时删除标记并重新绘制它

    编辑前 我正在使用下面的代码在android地图上重绘一个标记 实际上它重绘了一个标记 但它并没有删除旧的标记 我尝试过 mapView invlaidate 但它并没有删除旧的 这是 onLocationChanged 函数 Overri
  • 检查字典键是否有空值

    我有以下字典 dict1 city name yass region zipcode phone address tehsil planet mars 我正在尝试创建一个基于 dict1 的新字典 但是 它不会包含带有空字符串的键 它不会包

随机推荐

  • C 中的位摆弄 - 计数位

    我想计算一个非常大的位向量 即 100 000 位 中设置的位 我当前正在做的是使用指向 char 的指针 即 char cPtr 来指向位数组的开头 我然后 1 look at each element of the array i e
  • Google Docs Apps 脚本中的字数统计功能

    Google Apps 脚本中是否有一种方法可以从 Google 文档返回字数统计 假设我正在写一份对字数有特定限制的报告 它非常精确 准确地显示了 1 8k 2k 个单词 是的 这不仅仅是一个案例 而是很多 在 Microsoft Off
  • silverlight 4 中的可序列化属性

    那么 silverlight 4 中是否有 Serialized 属性呢 我在互联网上得到了一些令人困惑的答复 当我尝试在代码中使用它时 出现命名空间错误 这些是我的包含内容 using System using System Compon
  • 在 Xcode 7 中发现意外的 Mach-O 标头代码:0x72613c21

    我有一个使用 ObjC 动态框架的 Swift 项目 该框架必须与我的项目链接并嵌入到我的项目中 项目在设备上运行正常 提交到App Store时 验证时出现错误 Found an unexpected Mach O header code
  • 将 32 位 COM DLL 注册到 64 位 Windows 7

    我有一个 32 位 COM 组件 DLL 这个 DLL 是用 Delphi 编写的 它是一个 Win32 DLL 我想在 NET 平台上的 Visual C 项目中使用这个 DLL 我无法在项目中添加对此 DLL 的引用 我尝试在 Wind
  • AudioConverterFillComplexBuffer 返回 -50 (paramErr)

    我正在尝试将 PCM 32 位浮动音频流转换为 ALAC 我找到了一些可以构建的工作示例 但我自己的代码不断从 AudioConverterFillComplexBuffer 获取 50 paramErr 看到这段代码 我的眼睛都红了 我看
  • header() 不会自动重定向到另一个索引页

    当我点击登录时 它不会自动将我重定向到 home php 我必须刷新页面才能重定向我 我猜第一个 header 工作正常 因为它响应页面刷新 不起作用的是 if 语句中的第二个 header 我究竟做错了什么 非常感谢你的帮助 登录 php
  • .NET 和 C++ 应用程序之间的 IPC

    是否有用于 NET 应用程序和本机 C 应用程序之间的进程间通信 IPC 的库 可以使用Socket进行简单的通信 它位于操作系统中 因此您不需要任何新的库 详细信息在C 套接字 and C 套接字 如果进程间通信始终在同一台计算机上完成
  • 自定义组件控件不断重新创建

    我是 Firemonkey 自定义控件的新手 很抱歉 如果这是一个平庸的问题或重复的问题 但我被困住了 无法弄清楚 这是我的自定义控件的代码 unit swScheduler interface uses System SysUtils S
  • 如何显示每天的事件?

    我有一个事件页面 我需要在其中显示每天的事件 我已经做到了这一点 所以我正在进步 数据库有3个表 fairdays eventtypes events fairdays id fairdaydate 日期时间 daycolor 描述 eve
  • UIAutomator 与 espresso 一起运行

    我目前正在测试一个应设置为默认启动器的应用程序 我已经有一套了Espresso测试正在运行 但仅当用户之前选择我的应用程序作为启动器时它们才有效 向用户显示的用于选择启动器的对话框无法通过Espresso 因为它位于应用程序本身之外 然而
  • 尝试对函数进行逆向工程

    我正在尝试更多地了解 x86 中的汇编 我这里有一个神秘的函数 我知道它返回一个int并采取int争论 所以看起来像int mystery int n 但是我无法弄清楚C 中的函数 大会是 mov edi eax lea 0x0 rdi 8
  • 从 java 调用 Google Cloud Run

    我想从外部应用程序调用 Cloud Run 外部应用程序是用 Kotlin java 编写的 并在 JDK 11 JVM 上运行 它使用服务帐户进行身份验证 ServiceAccountCredentials fromStream serv
  • 在模块 django.contrib.gis.db 中找不到 GeoManager。 Django 2.0 中的模型

    我正在开发 GeoDjango 项目 第一次在网络应用程序中工作 尝试使用 GeoManager 但弹出错误提示module django contrib gis db models has no attribute GeoManager
  • 如何在 PHP 中提取字符串的前 100 个字符

    我正在寻找一种方法 从字符串变量中提取前 100 个字符 放入另一个变量中进行打印 有没有一个函数可以轻松做到这一点 例如 string1 I am looking for a way to pull the first 100 chara
  • UITableView - 更改部分标题颜色

    如何更改 UITableView 中节标题的颜色 EDIT The DJ S提供的答案应考虑 iOS 6 及以上版本 接受的答案已过时 这是一个老问题 但我认为答案需要更新 此方法不涉及定义和创建您自己的自定义视图 在 iOS 6 及更高版
  • Codeigniter 选择具有多个 id 的数据

    这是我的代码的示例以及我想要做什么的解释 在代码的开头 我在数据库中选择三个变量 然后我将它们与确定距离的函数进行比较 如果距离在给定距离内 那么我就有了该记录的 ID 这将导致多个 id 可能是五个或没有 取决于给定的变量 我需要知道的是
  • 我如何在 php 中使用正则表达式匹配阿拉伯字母[重复]

    这个问题在这里已经有答案了 我如何在 php 中将阿拉伯字母与正则表达式匹配 My Code name GET name if arabic letters only and spaces using regexp 我想你的答案就在这里 根
  • 将字符串值发送到 Angular 2 中 url 导航上的组件

    当我使用 router navigate 方法时 我需要一些帮助来将字符串 bookingNumber 传递给组件 现在 我有一个名为 bookingsService 的服务 它有一个类似以下代码的方法 redirectToBookingP
  • 鸟瞰图或地图 2.5D 渲染存在问题

    我正在开发一个路线规划导航软件 我正在使用以下解决方案将我的道路线变成 2 5D 或 3D 视图 使用 C 从线条绘制 2 5D 或 3D 地图 然而 上面的解决方案对于视口内 0 height 或 x gt width 然后上述解决方案变