我有一个代表道路的X,Y坐标列表。对于每5米,我需要计算这条路上切线的角度,正如我试图在图像中说明的那样。
我的问题是这条道路没有我可以简单推导出的数学函数,它由坐标列表(UTM33N)表示。
在我的其他类似项目中,我们使用ArcGIS / ESRI库来执行此类地理功能,但在此项目中,我需要独立于需要最终用户拥有许可证的任何软件,因此我需要执行自己计算(或找到一个可以做到的免费/开源库)。
我使用三次样条函数在坐标之间舍入线,因为线段上的所有切线都只是与该段平行。
但现在我被卡住了。我正在考虑简单地计算线上任意三个点之间的角度(给定足够的点),并使用它来找到切线,但这听起来不是一个好方法。有什么建议吗?
答案 0 :(得分:1)
最后,我得出结论,这些点足以使用简单的几何形状给出准确的角度:
//Calculate delta values
var dx = next.X - curr.X;
var dy = next.Y - curr.Y;
var dz = next.Z - curr.Z;
//Calculate horizontal and 3D length of this segment.
var hLength = Math.Sqrt(dx * dx + dy * dy);
var length = Math.Sqrt(hLength * hLength + dz * dz);
//Calculate horizontal and vertical angles.
hAngle = Math.Atan(dy/dx);
vAngle = Math.Atan(dz/hLength);