没有尖点的线偏移(平行线)

see*_*eek 5 c# math graphics vector

我正在尝试在附件上绘制偏移到主线的线条. 在此输入图像描述

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

在此输入图像描述

也许有人可以帮我这个代码提供我可以遵循的任何工作示例.

// 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;

     }
Run Code Online (Sandbox Code Playgroud)

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

在得到@jstreet的建议后,我尝试了CLIPPER库.结果非常好但是可以在线周围仅绘制平行线而不是闭合多边形(如附件上) 在此输入图像描述

UPDATE

我写了另一个问题,因为我认为使用CLIPPER进行平行线是值得的.链接问题

在此输入图像描述

Hus*_*lil 0

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