# Arcs

A $k$–*arc* in a projective or affine plane $P$ is a set of $k$ points of $P$, no three of which are collinear. A $k$–arc is *complete* if it cannot be extended to a $(k + 1)$–arc by the addition of another point. A *tangent* to an arc $A$ is a line which meets $A$ exactly once; a *secant* is a line which meets $A$ exactly twice; and a *passant*, or *external line*, is a line which does not meet $A$ at all.

## `kArc(P, k): Plane, RngIntElt -> SetEnum`

Return a $k$–arc for the plane $P$.

## `CompleteKArc(P, k): Plane, RngIntElt -> SetEnum`

Return a complete $k$–arc for the plane $P$ (if one exists).

## `IsArc(P, A): Plane, { PlanePt } -> BoolElt`

Returns `true` if the set of points $A$ is an arc in the plane $P$, i.e. no three points of $A$ are collinear.

## `IsComplete(P, A): Plane, { PlanePt } -> BoolElt`

Returns `true` if the $k$–arc $A$ is complete in the plane $P$.

## `Conic(P, S): Plane, { PlanePt } -> SetEnum`

Given a set $S$ of five points belonging to a classical projective plane $P$ of order $n > 3$ and being in general position, construct the unique conic that passes through them.

## `QuadraticForm(S): { PlanePt } -> RngMPolElt`

Given a set $S$ of five points belonging to a classical projective plane of order $n > 3$ that are in general position, return the quadratic form defining the conic containing the five points.

## `Tangent(P, A, p): Plane, { PlanePt }, PlanePt -> PlaneLn`

Given an arc $A$ in the plane $P$, and a point $p$ on $A$, return a tangent to $A$ at $p$.

## `AllTangents(P, A): Plane, { PlanePt} -> { PlaneLn}`

Given an arc $A$ in the plane $P$, return the set of tangent lines to $A$.

## `AllSecants(P, A): Plane, { PlanePt} -> { PlaneLn}`

Given an arc $A$ in the plane $P$, return the set of secant lines to $A$.

## `ExternalLines(P, A): Plane, { PlanePt} -> { PlaneLn}`

## `AllPassants(P, A): Plane, { PlanePt} -> { PlaneLn}`

Given an arc $A$ in the plane $P$, return the set of external lines to $A$.

## `Knot(P, C): Plane, { PlanePt} -> PlanePt`

Given a conic $C$ in the projective plane $P$ of even order, return the knot of the conic $C$, i.e the intersection point of the tangents to $C$.

## `Exterior(P, C): Plane, { PlanePt} -> { PlanePt}`

Given a conic $C$ in the projective plane $P$ of odd order, return the exterior points of $C$, i.e. the points of $P$ that lie on two tangents of $C$.

## `Interior(P, C): Plane, { PlanePt} -> { PlanePt}`

Given a conic $C$ in the projective plane $P$ of odd order, return the interior points of $C$, i.e. the points of $P$ that do not lie on any tangent of $C$.

## `Example: arcs (ex-ca0adf)`

The following sequence of instructions constructs an oval design from $PG_2(16)$.

```magma
> P, V, L := FiniteProjectivePlane(16);
> oval := kArc(P, 18);
> pts := Points(P) diff oval;
> lns := ExternalLines(P, oval);
> I := IncidenceStructure< SetToIndexedSet(pts) | [l meet pts : l in lns] >;
> D := Design(Dual(I), 2);
> D;
2-(120, 8, 1) Design with 255 blocks

```

The next example uses various functions discussed so far, and shows the relationship between a plane and its subplanes.

```magma
> K<w> := GF(9);
> P, V, L := FiniteProjectivePlane(K);
> c := kArc(P, 5);
> c;
{  ( 1 : 0 : 0 ), ( 0 : 1 : 0 ), ( 0 : 0 : 1 ), ( 1 : 2 : w^3 ),
   ( 1 : w : w) }
> C := Conic(P, c);
> C;
{  ( 1 : 0 : 0 ), ( 0 : 1 : 0 ), ( 0 : 0 : 1 ), ( 1 : 2 : w^3 ),
   ( 1 : w : w), ( 1 : w^5 : w^6 ), ( 1 : w^7 : 2 ), ( 1 : w^2 : 1 ),
   ( 1 : w^3 : w^5 ), ( 1 : w^6 : w^2 ) }
> #C;
10
> #Interior(P, C);
36
>
> S, SV, SL := SubfieldSubplane(P, GF(3));
> S subset P;
true
> a := kArc(S, 4);
> IsArc(S, a);
true
> IsArc(P, a);
true
> IsComplete(S, a);
true
> IsComplete(P, a);
false
> a;
{ ( 1 : 0 : 0 ), ( 0 : 1 : 0 ), ( 0 : 0 : 1 ), ( 1 : 2 : 1 ) }
> S2 := sub< P | a >;
> S2;
Projective Plane of order 3
> S2 eq S;
true
> p := Random(a);
> p;
( 1 : 2 : 1 )
> Tangent(S, a, p);
< 1 : 2 : 1 >
> AllTangents(S, a);
{
    < 1 : 2 : 0 >,
    < 0 : 1 : 2 >,
    < 1 : 2 : 1 >,
    < 1 : 0 : 1 >
}
> AllTangents(P, a);
{
    < 1 : w^5 : w^6 >,
    < 1 : 0 : w >,
    < 1 : w^2 : w >,
    < 1 : 0 : w^6 >,
    < 1 : 0 : 1 >,
    < 1 : w^6 : w^3 >,
    < 1 : w^6 : 0 >,
    < 0 : 1 : w^6 >,
    < 1 : 2 : 0 >,
    < 0 : 1 : 2 >,
    < 1 : 2 : 1 >,
    < 1 : w^3 : w^5 >,
    < 1 : 0 : w^7 >,
    < 1 : 0 : w^2 >,
    < 1 : w : 0 >,
    < 0 : 1 : w >,
    < 1 : 0 : w^5 >,
    < 1 : 0 : w^3 >,
    < 1 : w : w^7 >,
    < 1 : w^3 : 0 >,
    < 0 : 1 : w^3 >,
    < 1 : w^7 : w^2 >,
    < 1 : w^5 : 0 >,
    < 0 : 1 : w^5 >,
    < 1 : w^7 : 0 >,
    < 0 : 1 : w^7 >,
    < 1 : w^2 : 0 >,
    < 0 : 1 : w^2 >
}

```
