2016-11-21 49 views
1

我正在尝试绘制折线以显示多边形内的路线。多段线必须相互平行,而不是走出多边形。计算多边形内的折线的点

我的解释是可怕的,我想做的事情是这样的:

map example

从哪里开始任何意见,将不胜感激!

我需要用TypeScript为Angular 2中的CesiumJS创建一些东西,但是任何帮助都是有用的。

回答

1

在你所示的例子中,你的多段线不需要指定任何实际的内部点。您可以通过按照线的​​顺序(从指示的起点开始)只指定沿矩形外围的点来创建该图像的副本。该算法看起来像这样:

  1. 定义感兴趣的矩形。

  2. 定义描述矩形内路径的对角线斜率的直线。

  3. 生成一组完全覆盖矩形的平行线,并延伸到其边缘之外。这是通过向原始线的两个端点反复添加或减去一个固定的X或Y偏移量来完成的,以便您有一组平行线在所有方向上延伸到矩形之外。

  4. 按顺序(从任何一边开始到结束于对面)迭代线条集合,并查找线条与矩形相交的点。您可能需要查找algorithm to find intersection points

    a。对于任何不与矩形正好相交两次的行,请放弃该行。

    b。对于确实与矩形相交两次的其余行,将两个交点添加到折线,但是替换它们的添加顺序。换句话说,如果上一条线添加北交点,然后添加南交点,则当前线应在南北交点之前添加其南交点,反之亦然。

  5. 既然所有的交点都已经加到了折线中,那么你可以将该折线添加到你的场景中并进行渲染。

+0

所以我最终解决了这个问题。我现在将另一个库与Cesium结合使用 - https://github.com/chrisveness/geodesy。 计算交叉点是最困难的部分,下面是一个RunKit,描述如何去做 - https://runkit.com/hnipps/calculate-geodesic-intersection – HNipps