我正在使用OpenTK(OpenGL),一般提示会有所帮助。
我有一个三维地形。我在这个地形上有一个点O(x,y,z)和两条穿过这个点的垂直线,它们将作为我的X轴和Y轴。
现在我有一组2d点,位于极坐标(范围,theta)。我需要找到地形上哪些点对应于这些点。我不确定最好的方法是什么。我可以想到两个想法:
让我说我画的是A(x1,y1)。
找到穿过O和A的平面的交点,该平面垂直于XY平面。这将给我一条折线(语义可能会关闭)。现在在这一行上,我找到一个从O可见的点,并且距离范围很远。
创建一个垂直于XY平面的半径为“range”的圆,找到地形上的交点,找出哪些是从O可见并且掉落。
我知道我可以找到满足条件的几个点,所以我会根据地形进行进一步的检查,但是现在我需要得到一个满足这个条件的较小的集合。
我是opengl的新手,但我的几何图形非常好。我想知道在opengl中是否存在这样的东西,因为它是地面测量系统的标准问题。
答案 0 :(得分:1)
正如您所说,您提供的两个选项将为您提供超过您需要的一个点。据我了解您的问题,您只需要执行从极坐标(r, angle)
到笛卡尔坐标(x,y)
的基础更改。
这很简单。假设两个坐标空间共享原点O并且角度是从x轴测量的,则点(r_i, angle_i)
映射到x_i = r_i*cos(angle_i)
和y_i = r_i*sin(angle_i)
。如果这些假设不正确(即,如果原点不重合或者角度不是从平行于x轴的radii
测量的),则转换有点复杂但是仍然可以做到。
如果您的地形被表示为高度地图或2D高度数组(例如Terrain[x][y] = z
),一旦您获得了笛卡尔坐标(x_i,y_i)
中的点,您就可以找到该点的高度。当然,(x_i, y_i)
可能不是高度图的[x]
或[y]
索引之一。
在这种情况下,我认为你有几个选择:
(x,y)
点并取出该高度;或(x_i,y_i)
处的高度。 不幸的是,我也在学习OpenGL
并且无法提供任何具体的见解,但我希望这有助于解决您的问题。
答案 1 :(得分:0)
阅读你的描述我看到一点混乱......也许。
您已定义了点O(x,y,z)。很好,这是3D坐标系的极点。然后你想找到一个由极坐标定义的点。这也很好 - 它给你2D位置。基本上你需要做的就是在3D A'(x,y,0)中精确定位,因为我们假设你知道A在(r,t)的高程,你当然可以从地形。
角度(t)只能从一个轴测量。选择哪个轴将是您的北极并坚持。然后你衡量你有和 - 瞧! - 你有自己的位置。如果您不使用它,那么设置2D坐标的重点是什么?相反,你要为混音添加可见性 - 我认为它很重要,但是方位角(t)上的最高地形点不是必须的,它将在(r)范围内。
您有特定的坐标。就像RonL建议的那样,转换为(x,y),从实际地形中找到(z)并完成它。
除非那不是你所需要的。但在这种情况下,一个不同的问题是有序的:你在寻找什么?