Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无尖点的线偏移(平行线)_C#_Math_Vector_Graphics - Fatal编程技术网

C# 无尖点的线偏移(平行线)

C# 无尖点的线偏移(平行线),c#,math,vector,graphics,C#,Math,Vector,Graphics,我试着画一条偏移到主线的线,就像附件上一样。 我的代码有问题。它在直线上生成交点和尖点。(附件) 也许有人可以帮我写这段代码,提供我可以遵循的任何工作示例 // LEFT SIDE OF MAIN LINE int numberOfLines = 10; float offset = 10f; lastLinePoints = outerPoints; // outerPoint = Points from Main Line for(int i =

我试着画一条偏移到主线的线,就像附件上一样。

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

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

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

     }
//主线左侧
int numberOfLines=10;
浮动偏移=10f;
lastLinePoints=outerPoints;//outerPoint=主线的点
对于(int i=0;i
经过一些研究,我知道画平行曲线的方法可能很难。我还发现了一些算法(),但是这个数学对我来说很难用它来编写代码

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

更新

我写了另一个问题,因为我认为使用CLIPPER处理平行线是值得的


根据我以前的经验,在不应用多段线曲线偏移算法的情况下,将花费大量时间来解决您的问题,因此我的建议是开始实施任何算法,不管数学上有多困难。选择一种适合您的情况的已发布算法,这可能比为任何形状实现算法都要容易。 但你可以得到下面的链接一个镜头

  • 计算平行线参数:需要计算偏移,因为系数(角度)保持不变
  • 根据步骤1中的计算值计算相邻线之间的线交点
  • 在三个交点的连续集合上使用样条曲线。对于样条曲线,您可以使用任何三次样条曲线库,guthub()或codeproject()中有很多

  • 你能提供一个你做什么的完整例子吗?所以它实际上是从你的附加图像中画线。这段代码实际上画了这些线,除了第一条。第一个单线点位于outerPoints列表中。我认为没有必要在这里附上数百个点的列表,你用什么库来画图?矢量,但它与库无关。这是所有线的问题与抵消看看。请阅读我的更新问题。我正在使用CLIPPER,但没有任何好结果。Clipper无法在路径周围进行偏移,但无法进行简单的平行线,我不知道如何修改Clipper以实现此目的:/请阅读我更新的问题。我正在使用CLIPPER,但没有任何好结果。Clipper不能在路径周围进行偏移,但不能做简单的平行线,我不知道如何修改Clipper使其更新,以避免使用Clipper。