# Singular

#### D.13.2.13 ellipticNF

Procedure from library `polymake.lib` (see polymake_lib).

Usage:
ellipticNF(polygon); polygon list

Assume:
polygon is a list of integer vectors in the plane such that their convex hull C has precisely one interior lattice point; i.e. C is the Newton polygon of an elliptic curve

Purpose:
compute the normal form of the polygon with respect to the unimodular affine transformations T=A*x+v; there are sixteen different normal forms (see e.g. Bjorn Poonen, Fernando Rodriguez-Villegas: Lattice Polygons and the number 12. Amer. Math. Monthly 107 (2000), no. 3, 238--250.)

Return:
list, L such that
L[1] : list whose entries are the vertices of the normal form of the polygon
L[2] : the matrix A of the unimodular transformation
L[3] : the translation vector v of the unimodular transformation
L[4] : list such that the ith entry is the image of polygon[i] under the unimodular transformation T

Example:
 ```LIB "polymake.lib"; ==> Welcome to polymake version ==> Copyright (c) 1997-2015 ==> Ewgenij Gawrilow, Michael Joswig (TU Darmstadt) ==> http://www.polymake.org ring r=0,(x,y),dp; // the Newton polygon of the following polynomial // has precisely one interior point poly f=x22y11+x19y10+x17y9+x16y9+x12y7+x9y6+x7y5+x2y3; list polygon=newtonPolytopeLP(f); // its lattice points are polygon; ==> [1]: ==> 22,11 ==> [2]: ==> 19,10 ==> [3]: ==> 17,9 ==> [4]: ==> 16,9 ==> [5]: ==> 12,7 ==> [6]: ==> 9,6 ==> [7]: ==> 7,5 ==> [8]: ==> 2,3 // find its normal form list nf=ellipticNF(polygon); // the vertices of the normal form are nf[1]; ==> [1]: ==> 4,0 ==> [2]: ==> 0,0 ==> [3]: ==> 0,2 // it has been transformed by the unimodular affine transformation A*x+v // with matrix A nf[2]; ==> 3,-7, ==> -2,5 // and translation vector v nf[3]; ==> 15,-11 // the 3rd lattice point ... polygon[3]; ==> 17,9 // ... has been transformed to nf[4][3]; ==> 3,0 ```