我的代码有问题。它在线上产生交叉点和尖点。 (附接)
也许有人可以帮助我使用此代码提供我可以遵循的任何工作示例。
// 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
答案 0 :(得分:0)
根据我以前的经验,在不应用折线曲线偏移算法的情况下,将花费大量时间来解决您的问题,因此我的建议是开始实施任何算法而不管数学上的困难。选择一种适合您的情况的已发布算法,它可能比为任何形状实现算法更容易。 但是你可以获得以下链接 https://github.com/skyrpex/clipper
答案 1 :(得分:0)