d = %v

Parallel curve (offset)

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

Point

Circle

Parallel line

Decreasing slider and trace

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.

We add now a trace to the offset and choose a decreasing d value 
(opposed to a “increasing once” slider).

Example usage

Thus, offsetting simultaneously on a point and a line, for example, 
we can visualize the parabola by color contrast.

$\textsf{\LARGE offset}$

Locus

1

2

$\textsf{\LARGE locus 1}$

$\textsf{\LARGE locus 2}$

locus 1

locus 2

G = (-1.5, 2)
H = (4.25, 1)
i = Line(G, H)
dd = 4 (slider from 0 to 4, step 0.01)
d': 4 - dd
mm: (d' * UnitOrthogonalVector[i])
op2 = false
op4 = false
op3 = false
op1 = false
op6 = false
A = (-2.75, 3.5)
B = (2.75, 5)
r = Line(A, B)
d = 0 (slider from 0 to 4, step 0.01)
n: (d * UnitOrthogonalVector[r])
C = (0, 3.75)
D = (2.5, 3.5)
f = Line(C, D)
E = (4.75, 3.75)
c = Parabola(E, f)
P = Point(c)
nc = CurvatureVector(P, c)
Q: P + (d * nc / abs(nc))
Q': P - (d * nc / abs(nc))
u = Vector(P, Q)
lugar1 = Locus(Q, P)
lugar2 = Locus(Q', P)
F = (0.5, 4)
g = Circle(F, 4.2)
e = Circle(F, 4.2 - d)
e' = Circle(F, 4.2 + d)
h = Circle(F, d)
op7 = false
m: (d * UnitOrthogonalVector[i])
offset2 = Translate(i, mm)
n': (-n)
u': (-u)
offset = Translate(r, Vector[(d * UnitOrthogonalVector[r])])
op5 = false
offset1 = Translate(i, m)
offset1' = Translate(i, Vector[(-m)])
inter1 = Intersect(h, offset1, 1)
inter2 = Intersect(h, offset1, 2)
locus1 = Locus(inter1, d)
locus2 = Locus(inter2, d)
h' = Circle(F, d')
offset' = Translate(r, Vector[((-d) * UnitOrthogonalVector[r])])
offset2' = Translate(i, Vector[(-mm)])
texto9: "d' = " + d' + ""