找到多段线给定点的切线
Finding the tangent on a given point of a polyline
我有一个代表道路的 X、Y 坐标列表。对于每 5 米,我需要计算这条道路上的切线角度,正如我在图片中尝试说明的那样。
我的问题是这条路不是用我可以简单推导的数学函数表示的,而是用坐标列表 (UTM33N) 表示的。
在我的其他类似项目中,我们使用 ArcGIS/ESRI 库来执行诸如此类的地理功能,但在这个项目中,我需要独立于任何需要最终用户拥有许可证的软件,所以我需要自己做计算(或者找一个可以做的free/open源库)。
我正在使用三次样条函数使坐标之间的线变圆,因为线段上的所有切线否则将与线段平行。
但现在我卡住了。我正在考虑简单地计算直线上任意三点之间的角度(给定足够的点),并使用它来找到切线,但这听起来不是一个好方法。有什么建议吗?
最后,我得出结论,这些点足够多,可以使用简单的几何图形给出准确的角度:
//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);
我有一个代表道路的 X、Y 坐标列表。对于每 5 米,我需要计算这条道路上的切线角度,正如我在图片中尝试说明的那样。
我的问题是这条路不是用我可以简单推导的数学函数表示的,而是用坐标列表 (UTM33N) 表示的。
在我的其他类似项目中,我们使用 ArcGIS/ESRI 库来执行诸如此类的地理功能,但在这个项目中,我需要独立于任何需要最终用户拥有许可证的软件,所以我需要自己做计算(或者找一个可以做的free/open源库)。
我正在使用三次样条函数使坐标之间的线变圆,因为线段上的所有切线否则将与线段平行。
但现在我卡住了。我正在考虑简单地计算直线上任意三点之间的角度(给定足够的点),并使用它来找到切线,但这听起来不是一个好方法。有什么建议吗?
最后,我得出结论,这些点足够多,可以使用简单的几何图形给出准确的角度:
//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);