# Affine plane curves

AffinePlaneCurveType
AffinePlaneCurve{BaseField<:Field, RingType<:Ring} <: AbsAffineCurve{BaseField, RingType}

Type for reduced affine plane curves.

Examples

julia> R, (x, y) = polynomial_ring(QQ, ["x", "y"]);

julia> F = y^3*x^6 - y^6*x^2;

julia> C = plane_curve(F)
Affine plane curve
defined by 0 = x^5*y - x*y^4

source
defining_equationMethod
defining_equation(C::AffinePlaneCurve)

Return the defining equation of C.

source
defining_equation(C::ProjectivePlaneCurve)

Return the defining equation of the (reduced) plane curve C.

source
common_componentsMethod
common_components(C::AffinePlaneCurve, D::AffinePlaneCurve)

Return the affine plane curve consisting of the common components of C and D, or an empty vector if they do not have a common component. This component can be reducible.

Examples

julia> R, (x, y) = polynomial_ring(QQ, ["x", "y"]);

julia> C = plane_curve(x*(x+y)*(x^2 + x + 1));

julia> D = plane_curve(x*(x+y)*(x-y));

julia> common_components(C, D)
1-element Vector{AffinePlaneCurve{QQField, MPolyQuoRing{QQMPolyRingElem}}}:
scheme(x^2 + x*y)

source
multiplicityMethod
multiplicity(C::AffinePlaneCurve, P::AbsAffineRationalPoint)

Return the multiplicity of C at P.

Examples

julia> R, (x, y) = polynomial_ring(QQ, ["x", "y"]);

julia> C = plane_curve(x^2*(x+y)*(y^3-x^2));

julia> P = C([2,-2])
Rational point
of scheme(-x^4 - x^3*y + x^2*y^3 + x*y^4)
with coordinates (2, -2)

julia> multiplicity(C, P)
1

source
tangent_linesMethod
tangent_lines(C::AffinePlaneCurve, P::AbsAffineRationalPoint)

Return the tangent lines at P to C with their multiplicity.

Examples

julia> R, (x, y) = polynomial_ring(QQ, ["x", "y"]);

julia> C = plane_curve(x^2*(x+y)*(y^3-x^2));

julia> P = C([0, 0])
Rational point
of scheme(-x^4 - x^3*y + x^2*y^3 + x*y^4)
with coordinates (0, 0)

julia> tangent_lines(C, P)
Dict{AffinePlaneCurve{QQField, MPolyQuoRing{QQMPolyRingElem}}, Int64} with 2 entries:
scheme(x)     => 3
scheme(x + y) => 1

source
intersection_multiplicityMethod
intersection_multiplicity(C::AffinePlaneCurve, D::AffinePlaneCurve, P::AbsAffineRationalPoint)

Return the intersection multiplicity of C and D at P.

Examples

julia> R, (x, y) = polynomial_ring(QQ, ["x", "y"]);

julia> C = plane_curve((x^2+y^2)*(x^2 + y^2 + 2*y))
Affine plane curve
defined by 0 = x^4 + 2*x^2*y^2 + 2*x^2*y + y^4 + 2*y^3

julia> D = plane_curve((x^2+y^2)*(y^3*x^6 - y^6*x^2))
Affine plane curve
defined by 0 = x^7*y + x^5*y^3 - x^3*y^4 - x*y^6

julia> Q = D([0, -2]);

julia> intersection_multiplicity(C, D, Q)
1

source
is_transverse_intersectionMethod
is_transverse_intersection(C::AffinePlaneCurve, D::AffinePlaneCurve, P::AbsAffineRationalPoint)

Return true if C and D intersect transversally at P and false otherwise.

Examples

julia> R, (x, y) = polynomial_ring(QQ, ["x", "y"])
(Multivariate polynomial ring in 2 variables over QQ, QQMPolyRingElem[x, y])

julia> C = plane_curve(x*(x+y))
Affine plane curve
defined by 0 = x^2 + x*y

julia> D = plane_curve((x-y)*(x-2))
Affine plane curve
defined by 0 = x^2 - x*y - 2*x + 2*y

julia> P = C([QQ(0), QQ(0)])
Rational point
of scheme(x^2 + x*y)
with coordinates (0, 0)

julia> Q = C([QQ(2), QQ(-2)])
Rational point
of scheme(x^2 + x*y)
with coordinates (2, -2)

julia> is_transverse_intersection(C, D, P)
false

julia> is_transverse_intersection(C, D, Q)
true

source