Curvas paralelas (offset)

Usando el comando VectorNormalUnitario (y el vector opuesto), 
es sencillo crear paralelas a una recta, a distancias progresivas.
Para cada recta, encontramos un par de secuencias de paralelas.

Punto

Circunferencia

Rectas paralelas

Usando el comando VectorCurvatura y la herramienta 
Lugar geométrico, podemos generalizar el paralelismo 
a muchas curvas (offset). Observemos que, en general, 
las curvas offset no son semejantes a la curva original.

Pero, en el caso de la circunferencia, cuyo offset también es una circunferencia, 
no necesitamos ni el comando VectorCurvatura ni la herramienta Lugar geométrico, 
ya que basta variar adecuadamente el radio de la circunferencia original.

Si consideramos un punto como una circunferencia de radio 0,
obtenemos un único offset centrado en él.

Ejemplo de uso

Así, haciendo offset simultáneamente sobre un punto y una recta, 
podemos visualizar los puntos de intersección (puntos de la parábola).

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, 2.25)
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)
lugar1 = Locus(P + (1.2 * nc / abs(nc)), P)