Affine plane curves
AffinePlaneCurve
— TypeAffinePlaneCurve{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
defining_equation
— Methoddefining_equation(C::AffinePlaneCurve)
Return the defining equation of C
.
defining_equation(C::ProjectivePlaneCurve)
Return the defining equation of the (reduced) plane curve C
.
common_components
— Methodcommon_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)
multiplicity
— Methodmultiplicity(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
tangent_lines
— Methodtangent_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
intersection_multiplicity
— Methodintersection_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
is_transverse_intersection
— Methodis_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
projective_closure
— Methodprojective_closure(C::AffinePlaneCurve) -> ProjectivePlaneCurve
Return the projective closure of C
.