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 Plane_arcs (H150E10)

The following sequence of instructions constructs an oval design from PG2(16).
> 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.
> 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 >
}
V2.28, 13 July 2023