我需要编写一个函数,它按行路径和宽度生成道路路径。
例如,我有折线的数组:
var coords = [
50, 50,
150, 50,
250, 100,
220, 200,
350, 100,
];
https://i.stack.imgur.com/FCCxb.png
然后我使用函数来获取走廊路径:
var width = 10;
var corridorPath = getCorridorPath(coords, width);
函数应该返回类似的内容:
[
40, 50,
50, 40,
150, 40,
157, 41,
255, 90,
260, 105,
240, 170,
340, 90,
360, 90,
360, 110,
220, 215,
205, 205,
233, 107,
147, 62,
50, 60,
40, 50,
]
答案 0 :(得分:0)
计算平行折线和连词。
对于两个相邻边 AB 和 BC ,找到标准化向量 ab 和 cb 。
计算单位平分线矢量:
b = (ab + cb).normalized
计算平分段的长度为
len = d / sin(fi)
其中d是偏移(半宽),fi是矢量b和ab之间的角度:
fi = atan2(crossproduct(b,ab), dotproduct(b,ab))
找到偏移点(左和右)作为
B' = B + l * b
B'' = B - l * b
请注意,您要剪切长三角形,因此偏移点对于具有锐角的边有效,并且您需要重新计算切割上限的两个点 - 例如,获取中心点B''' = B - d * b
并添加矢量,垂直平分线。