如何实现三点line strip中间拐角的恒定尺寸平滑处理
三点线串拐角恒定尺寸平滑实现方案
你之前用贝塞尔曲线或样条实现时尺寸随参数变化,核心原因是采用了线段比例参数确定平滑区间的起止点,换成固定长度的切点即可解决问题,具体实现步骤如下:
- 第一步:定义固定平滑半径
r,该值即为你需要的恒定平滑区域尺寸,全局固定后不会随前后线段长度变化 - 第二步:计算两条线段的单位方向向量
- 入边p1→p2的单位向量:
v1 = (p2.x - p1.x, p2.y - p1.y) / 两点欧氏距离(p1,p2) - 出边p2→p3的单位向量:
v2 = (p3.x - p2.x, p3.y - p2.y) / 两点欧氏距离(p2,p3)
- 入边p1→p2的单位向量:
- 第三步:确定平滑段的两个端点
- 入边切点
a = (p2.x - v1.x * r, p2.y - v1.y * r),如果p1到p2的长度小于r,可直接取a=p1避免超出线段范围 - 出边切点
b = (p2.x + v2.x * r, p2.y + v2.y * r),如果p2到p3的长度小于r,可直接取b=p3避免超出线段范围
- 入边切点
- 第四步:绘制平滑段,可选两种实现方案:
- 圆弧方案(尺寸恒定最精准)
计算p2点拐角的内角角平分线,沿角平分线向内偏移得到圆心o,保证o到a、o到b的距离均等于r,绘制a到b的半径为r的圆弧即可,最终拼接路径为:p1 → a → 圆弧 → b → p3 - 二次贝塞尔方案(代码实现更简单)
直接以原始拐点p2为控制点,a和b为起止点绘制二次贝塞尔曲线即可,最终拼接路径为:p1 → a → 二次贝塞尔曲线 → b → p3,因a、b距离p2的长度固定为r,贝塞尔曲线的平滑区域大小也会保持恒定。
- 圆弧方案(尺寸恒定最精准)

内容的提问来源于stack exchange,提问作者user15455820
相关产品推荐
相关产品推荐

