走廊路径由线路径和宽度

时间:2018-05-16 09:30:16

标签: javascript math canvas geometry

我需要编写一个函数,它按行路径和宽度生成道路路径。

例如,我有折线的数组:

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,
]

https://i.stack.imgur.com/v3wxN.png

1 个答案:

答案 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并添加矢量,垂直平分线。