【问题标题】:Line offset (parallel lines) without cusps没有尖点的线偏移(平行线)
【发布时间】:2016-07-21 13:56:49
【问题描述】:

我正在尝试绘制与主线有偏移的线,就像附件上一样。

我的代码有问题。它在线上产生交叉点和尖点。 (附件)

也许有人可以帮助我处理这段代码,提供我可以遵循的任何工作示例。

// LEFT SIDE OF MAIN LINE
     int numberOfLines = 10;
     float offset = 10f;
     lastLinePoints = outerPoints; // outerPoint = Points from Main Line
     for(int i = 0; i < numberOfLines; i++)
     {
         List<Vector3> tempPoints = new List<Vector3> ();
         for (int k = 0; k < lastLinePoints.Count; k++) {
             if (k + 1 < lastLinePoints.Count) {
                 Vector3 direction = lastLinePoints [k + 1] - lastLinePoints [k];
                 // up direction:
                 Vector3 up = new Vector3(0.0f, 1.0f, 0.0f);
                 // find right vector:
                 Vector3 right =  Vector3.Cross(direction.normalized, up.normalized);
                 Vector3 newPoint = lastLinePoints [k] + (right * offset);
                 tempPoints.Add (newPoint);
             }


         }
         VectorLine lineTemp = new VectorLine ("lineCurved", tempPoints, 120f / _camera2DObject.GetComponent<Camera> ().orthographicSize, LineType.Continuous);
         lineTemp.Draw3D ();
         lastLinePoints = tempPoints;

     }

经过一些研究,我知道绘制平行曲线的解决方案可能很困难。我还发现了一些算法 (https://hal.inria.fr/inria-00518005/document),但这种数学对我来说很难编写代码。

根据@jstreet 的建议,我尝试了 CLIPPER 库。结果非常好,但是否可以仅绘制平行线而不是围绕线绘制闭合多边形(如附件)

更新

我写了另一个问题,因为我认为将 CLIPPER 用于平行线是值得的。 LINK TO question

【问题讨论】:

  • 你能提供一个完整的例子来说明你的工作吗?这样它实际上会从您附加的图像中绘制线条。
  • 这段代码实际上画出了除了第一条线之外的这些线。第一个线点在外点列表 中。我认为这里没有必要在 List 上附加数百个点
  • 你用什么库来绘图?
  • Vectrosity 但它与库无关。这是所有带有偏移的行的问题
  • 看看CLIPPER

标签: c# math graphics vector-graphics


【解决方案1】:

根据我以前的经验,在不应用折线曲线偏移算法的情况下,将花费大量时间来解决您的问题,因此我的建议是开始实施任何算法,无论数学困难如何。选择一种完全适合您情况的已发布算法,它可能比为任何形状实现算法更容易。 但是您可以试一下以下链接 https://github.com/skyrpex/clipper

【讨论】:

  • 请阅读我更新的问题。我正在使用 CLIPPER,但没有任何好的结果。 Clipper 不能在路径周围进行偏移,但不能做简单的平行线,我不知道如何修改 Clipper 来做到这一点:/
【解决方案2】:
  1. 计算平行线参数:您需要计算偏移,因为系数(角度)保持不变。
  2. 根据步骤 1 中的计算值计算相邻线之间的线交点。
  3. 在三个交点的连续集合上使用样条。对于样条,您可以使用任何三次样条库,guthub (https://gist.github.com/dreikanter/3526685) 或 codeproject (http://www.codeproject.com/Articles/560163/Csharp-Cubic-Spline-Interpolation) 中有很多。

【讨论】:

  • 请阅读我更新的问题。我正在使用 CLIPPER,但没有任何好的结果。 Clipper 不能在路径周围进行偏移,但不能做简单的平行线,我不知道如何修改 Clipper 来做到这一点:/
  • 已更新以避免使用 CLIPPER。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 2013-04-15
  • 2012-02-12
相关资源
最近更新 更多