Curvas paralelas (offset)

Utilizando o comando VetorUnitárioPerpendicular (e seu vetor oposto), 
é simples criar sequências de retas paralelas a uma reta, a distâncias progressivas.
Para cada reta r, encontramos um par de sequências de paralelas.

Ponto

Circunferência

Retas paralelas

Utilizando o comando VectorCurvatura e à ferramenta 
Lugar Geométrico, podemos generalizar o paralelismo 
para muitas curvas (offset). Note que, em geral,
as curvas offset não são congruentes com a curva original.

Mas, no caso da circunferência, cujo offset também é uma circunferência, 
não precisamos do comando VetorCurvatura ou da ferramenta Lugar Geométrico, 
pois basta variar adequadamente o raio da circunferência original.

Se considerarmos um ponto como uma circunferência de raio 0,
obtemos uma única sequência de offsets centrados nele.

Exemplo de uso

Dessa forma, ao fazer offset simultaneamente em um ponto e uma reta, 
podemos visualizar os pontos de interseção (pontos da 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, 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)