Home Online Manual
Top
Back: extendGC
Forward: locusdg
FastBack:
FastForward:
Up: grobcov_lib
Top: Singular Manual
Contents: Table of Contents
Index: Index
About: About this document

D.2.4.10 locus

Procedure from library grobcov.lib (see grobcov_lib).

Usage:
locus(ideal F[,options])
Special routine for determining the locus of points of a geometrical construction.

Input:
The input ideal must be the set equations
defining the locus. Calling sequence:
locus(F[,options]);
The input ring must be a parametrical ideal
in Q[x1,..,xn][u1,..,um],
(x=tracer variables, u=mover variables).
The number of tracer variables is n=dim(space).
The mover variables can be restricted by the user to the last k variaboes by adding the option "moverdim",k
(Inverts the concept of parameters and variables of
the ring).

Options:
An option is a pair of arguments: string, integer.
To modify the default options, pairs of arguments
-option name, value- of valid options must be added to the call.The algorithm allows the following options as pair of arguments:

"moverdim", k to restrict the mover-variables of the anti-image to the last k variables.
By default k is equal to the number of u-variables,
The restriction to a smaller value
can produce an error in the character
"Normal" or "Special" of a locus component.

"grobcov", list of the previous computed grobcov(F). It is to be used when we modify externally the grobcov, for example to obtain the real grobcov.

"anti-image",0 if the anti-image is not to be
shown for "Normal" components.

"comments", c: by default it is 0, but it can be set to 1.

Return:
The output is a list of the components:
((p1,(p11,..p1s_1),tax_1),..,(pk,(pk1,..pks_k),tax_k) Elements 1 and 2 of a component represent the
P-canonical form of the component.
The third element tax is:
for normal point components,
tax=(d,taxonomy,anti-image) being
d=dimension of the anti-image on the mover variables, taxonomy="Normal" or "Special" and
anti-image=ideal of the anti-image over the mover
variables.
for non-normal point components,
tax =(d,taxonomy) being
d=dimension of the component and
taxonomy="Accumulation" or "Degenerate".
The components are given in canonical P-representation. The normal locus has two kind of components:
Normal and Special.
Normal component:
- each point in the component has 0-dimensional
anti-image.
- the anti-image in the mover coordinates is equal
to the dimension of the component
Special component:
- each point in the component has 0-dimensional
anti-image.
- the anti-image in the mover coordinates is smaller
than the dimension of the component
The non-normal locus has two kind of components:
Accumulation and Degenerate.
Accumulation component:
- each point in the component has anti-image of
dimension greater than 0.
- the component has dimension less than n-1.
Degenerate components:
- each point in the component has anti-image
of dimension greater than 0.
- the component has dimension n-1.
When a normal point component has degree greater than 9, then the taxonomy is not determined, and (n,'normal', 0) is returned as third element of the component. (n is the dimension of the space).

Given a parametric ideal F representing the system F
determining the locus of points (x) which verify certain properties, the call to locus(F) determines the different classes of locus components, following the taxonomy
defined in the book:
A. Montes. "The Groebner Cover"
A previous paper gives particular definitions
for loci in 2d.
M. Abanades, F. Botana, A. Montes, T. Recio,
"An Algebraic Taxonomy for Locus Computation
in Dynamic Geometry",
Computer-Aided Design 56 (2014) 22-33.

Note:
The input must be the locus system.

Example:
 
LIB "grobcov.lib";
if(defined(R)){kill R;}
ring R=(0,x,y),(x1,y1),dp;
short=0;
// Concoid
ideal S96=x1 ^2+y1 ^2-4,(x-2)*x1 -x*y1 +2*x,(x-x1 )^2+(y-y1 )^2-1;
locus(S96);
==> [1]:
==>    [1]:
==>       _[1]=(x^4+2*x^3+x^2*y^2-3*x^2-2*x*y^2-8*x*y-6*x+2*y^2+8*y+6)
==>    [2]:
==>       [1]:
==>          _[1]=(y^2+2*y+2)
==>          _[2]=(x-y-2)
==>    [3]:
==>       [1]:
==>          1
==>       [2]:
==>          Normal
==>       [3]:
==>          _[1]=x1^2+y1^2-4
==> [2]:
==>    [1]:
==>       _[1]=(x^2+y^2-4*y+3)
==>    [2]:
==>       [1]:
==>          _[1]=1
==>    [3]:
==>       [1]:
==>          0
==>       [2]:
==>          Special
==>       [3]:
==>          _[1]=x1^2+y1^2-4
==>          _[2]=4875*y1^6-548*x1*y1^4+3836*y1^5+26216*x1*y1^3+7208*y1^4-193\
   44*x1*y1^2-12320*y1^3+79328*x1*y1-132624*y1^2-20096*x1+73152*y1-67328
==>          _[3]=4875*x1*y1^5+10514*x1*y1^4+7652*y1^5+20812*x1*y1^3-10144*y1\
   ^4+54392*x1*y1^2+13760*y1^3-86304*x1*y1+26432*y1^2+70528*x1-214336*y1+130\
   304
// EXAMPLE
// Consider two parallel planes z1=-1 and z1=1, and two orthogonal parabolas on them.
// Determine the locus generated by the lines that rely the two parabolas
// through the points having parallel tangent vectors.
if(defined(R)){kill R;}
ring R=(0,x,y,z),(lam,x2,y2,z2,x1,y1,z1), lp;
short=0;
ideal L=z1+1,
x1^2-y1,
z2-1,
y2^2-x2,
4*x1*y2-1,
x-x1-lam*(x2-x1),
y-y1-lam*(y2-y1),
z-z1-lam*(z2-z1);
locus(L);  // uses "moverdim",7
==> [1]:
==>    [1]:
==>       _[1]=(2048*x^3*z+2048*x^3-4096*x^2*y^2+1152*x*y*z^2-1152*x*y-2048*y\
   ^3*z+2048*y^3+27*z^4-54*z^2+27)
==>    [2]:
==>       [1]:
==>          _[1]=(z+1)
==>          _[2]=(y)
==>       [2]:
==>          _[1]=(z-1)
==>          _[2]=(x)
==>    [3]:
==>       [1]:
==>          2
==>       [2]:
==>          Normal
==>       [3]:
==>          _[1]=z1+1
==>          _[2]=x1^2-y1
==>          _[3]=z2-1
==>          _[4]=4*y2*y1-x1
==>          _[5]=4*y2*x1-1
==>          _[6]=x2-y2^2
// Now observe the effect on the antiimage of option moverdim:
// It does not take into account that lam is free.
locus(L,"moverdim",3);
==> [1]:
==>    [1]:
==>       _[1]=(2048*x^3*z+2048*x^3-4096*x^2*y^2+1152*x*y*z^2-1152*x*y-2048*y\
   ^3*z+2048*y^3+27*z^4-54*z^2+27)
==>    [2]:
==>       [1]:
==>          _[1]=(z+1)
==>          _[2]=(y)
==>       [2]:
==>          _[1]=(z-1)
==>          _[2]=(x)
==>    [3]:
==>       [1]:
==>          1
==>       [2]:
==>          Special
==>       [3]:
==>          _[1]=z1+1
==>          _[2]=x1^2-y1
// Observe that with the option "mpverdim",3 the taxonomy becomes Special because considering only x1,y1,z1 as mover variables does not take into account that lam is free in the global anti-image.