1

我目前正在开展一个项目,该项目旨在使用 Google Earth API 将现实世界的数据映射到 Google Earth 地球上。大佬们要求比插件提供更苛刻的视觉效果(即花哨的线条、图像和形状,随着时间的推移会产生不同的不透明度填充),所以我们决定使用 Processing.js 语言来处理事物的图形方面。

目前,我在后台建立了 GE 插件。Processing.js 草图直接位于其上方的 canvas 元素中,该元素具有 CSS 规范:pointer-events: none(即,这允许鼠标与插件交互,而写入 Processing 草图的任何内容都会显示在最佳!)

我的问题涉及 3D 投影。当图形在 GE 中显示时,该插件能够处理背景中所有令人讨厌的矩阵变换(这意味着如果你在 GE 中将一个点放置在 lat:90, lon:0, 无论你如何在地球上移动,该点将保持在北极上方)。在处理覆盖中,我试图模拟这一点。

和。很多。困难。

Google Earth ge.getView().project(lat, lon, alt, altMode)函数是我目前用来将 3D 纬度/经度点投影到 2D 坐标中的函数(然后使用在返回的点在屏幕上绘制一个椭圆加工)。您可以在下面看到:

https://sites.google.com/site/robbieskml/kmltester/Screen%20Shot%202014-02-04%20at%201.28.28%20PM.png?attredirects=0

您会注意到红色和黄色椭圆实际上是地球后面的点。这是我的问题,我迫切需要一些建议/帮助。使用 GE 插件实现反向剔除的最有效方法是什么,以便 Processing.js 在环绕地球的“背面”时不会绘制椭圆。我的脑筋急转弯是我仍然想保持在 X、Y 和 Z 方向上绕地球旋转的能力(即不限制视口)!

感谢堆栈溢出!

4

1 回答 1

1

一种不需要您进行任何 3d 数学运算的简单方法是围绕该点创建一个小三角形——想象它代表地板上的一个实际三角形,该点位于该点的中间——使用 Google 投影所有三个点地球project法,然后计算出二维三角形的有符号面积。如果面积为正则绘制,如果面积为负则不绘制。

因此,例如,对于 latitude 和 longitude (n, m), project (n-0.01, m)(n, m+0.01)(n+0.01, m)获得 2d locations (a, q)(b, r)and (c, s)

然后测试符号(b - a) * (s - q) - (c - a) * (r - q)——实际上是三角形符号面积的两倍,但加倍不会影响符号。这个公式是众所周知的。这是 StackExchange 源代码

我是临时输入的,所以我可能混淆了我的惯用手。如果是这样,只需翻转测试:抽签为负,不抽签为正。

于 2014-02-04T00:53:45.707 回答