summaryrefslogtreecommitdiff
path: root/third_party/spiro/curves/offset.py
blob: c528aec4f0d88b7fec862699d57592a3d5067301 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# offset curve of piecewise cornu curves

from math import *

import pcorn
from clothoid import mod_2pi

def seg_offset(seg, d):
    th0 = seg.th(0)
    th1 = seg.th(seg.arclen)
    z0 = [seg.z0[0] + d * sin(th0), seg.z0[1] - d * cos(th0)]
    z1 = [seg.z1[0] + d * sin(th1), seg.z1[1] - d * cos(th1)]
    chth = atan2(z1[1] - z0[1], z1[0] - z0[0])
    return [pcorn.Segment(z0, z1, mod_2pi(chth - th0), mod_2pi(th1 - chth))]


def offset(curve, d):
    segs = []
    for seg in curve.segs:
        segs.extend(seg_offset(seg, d))
    return pcorn.Curve(segs)