Parallel curves (offset)

Using the UnitPerpendicularVector command (and its opposite vector), 
it is easy to create sequences of parallels to a line, at progressive distances.
For each line r, we find a pair of sequences.

Point

Circle

Parallel lines

Thanks to the CurvatureVector command and the Locus 
tool, we can generalize parallelism to many curves (offset). 
Note that, in general, the offset curves are not congruent 
with the original curve.

But, in the case of the circle, whose offset is also a circle, 
we don't need the CurvatureVector command or the Locus tool,
since it's enough to vary the radius of the original circle appropriately.

If we consider a point as a circle of radius 0,
we obtain a unique sequence of offset centered on it.

Example usage

Thus, offsetting simultaneously on a point and a line, 
we can visualize the points of intersection (points of the parabola).

op2 = false
op4 = false
op3 = false
op1 = true
A = (-2.75, 3.5)
B = (2.75, 5)
r = Line(A, B)
C = (0, 3.75)
D = (2.5, 3.5)
E = (4.75, 3.75)
d = Line(C, D)
c = Parabola(E, d)
P = Point(c)
nc = CurvatureVector(P, c)
F = (0.5, 4)
g = Circle(F, 4.2)
op5 = false
G = (-1.5, 2)
H = (4.25, 1)
s = Line(G, H)
hL = Sequence(Circle[F, k], k, 0, 20, 0.4)
offset2L = Sequence(Translate[s, Vector[(k * UnitOrthogonalVector[s])]], k, 0, 20, 0.4)
offset2'L = Sequence(Translate[s, Vector[((-k) * UnitOrthogonalVector[s])]], k, 0, 20, 0.4)
zip1a = RemoveUndefined(Zip[Intersect[c1, c2, 1], c1, hL, c2, offset2L])
zip2a = RemoveUndefined(Zip[Intersect[c1, c2, 1], c1, hL, c2, offset2'L])
zip1b = RemoveUndefined(Zip[Intersect[c1, c2, 2], c1, hL, c2, offset2L])
zip2b = RemoveUndefined(Zip[Intersect[c1, c2, 2], c1, hL, c2, offset2'L])
offsetL = Sequence(Translate[r, Vector[(k * UnitOrthogonalVector[r])]], k, 0, 20, 0.4)
offset'L = Sequence(Translate[r, Vector[((-k) * UnitOrthogonalVector[r])]], k, 0, 20, 0.4)
lugar2L = Sequence(Locus[P - (k * nc / abs(nc)), P], k, 0, 20, 0.4)
lugar1L = Sequence(Locus[P + (k * nc / abs(nc)), P], k, 0, 20, 0.4)
eL = Sequence(Circle[F, 4.2 - k], k, 0, 20, 0.4)
e'L = Sequence(Circle[F, 4.2 + k], k, 0, 20, 0.4)