gpt4 book ai didi

postgresql - 使用 Postgis 绘制相机范围

转载 作者:行者123 更新时间:2023-11-29 11:25:18 24 4
gpt4 key购买 nike

我正在处理一些相机数据。我有一些点,包括方位角、角度、距离,当然还有坐标场属性。在 postgresql postgis 中,我想用函数绘制这样的形状。

我怎样才能画出这个粉红色的范围形状?首先我应该画 360 度圆然后从我的形状中提取...我不知道怎么做?

enter image description here

最佳答案

我会 create a circle以您的半径距离围绕点 (x,y),然后使用以下信息创建一个高度大于半径的三角形。

然后使用这两个多边形在两个几何之间做一个 ST_Intersection。

注意:此方法仅在角度小于 180 度时有效。

请注意,如果您延伸外边缘并与圆弧的中点呈 90 度角相交,则您有一个角和一个相邻边。现在你可以 SOH CAH TOA 了!

Extend and make right triangles

获得点 B 和 C

让点 A = (x,y)

获取顶点:

点 B = (x + 半径, y + (r * tan(角度)))

得到底点:

点 C = (x + 半径, y - (r * tan(angle)))

将你的三角形旋转到你的方位角

现在您有了三角形,您需要将它旋转到您的方位角,轴心点为 A。这意味着您在进行旋转时需要将点 A 置于原点。旋转是最棘手的部分。它一直用于计算机图形学。 (实际上,如果您了解 OpenGL,就可以让它为您进行旋转。)

注意:此方法围绕原点逆时针旋转一个角度 (theta)。您可能需要相应地调整方位角。

第一步: translate您的三角形,以便 A(您的原始 x,y)位于 0,0。无论您对 x 和 y 添加/减去什么,对其他两点执行相同的操作。

(你需要翻译它,因为你需要A点在原点)

第二步:然后使用旋转矩阵旋转点 B 和 C。更多信息 here ,但我会给你公式:

Rotation matrix

Your new point is (x', y')

对 B 点和 C 点执行此操作。

第三步:通过加减法将它们翻译回原来的位置。如果你上次减去 x,这次加上它。

最后,使用点 {A,B,C} 创建一个三角形。

然后做一个ST_Intersection(geom_circle,geom_triangle);

因为这需要大量计算,所以最好编写一个程序来完成所有这些计算,然后填充一个表。

关于postgresql - 使用 Postgis 绘制相机范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7687636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com