igeo

## Interface IVec2I

- All Superinterfaces:
    IArithmeticVal<IVec2I,IDoubleI>, IParameter, IVal, IVec2Op
  All Known Implementing Classes:
    IVec2, IVec2f, IVec2R

      public interface IVec2I
      extends IVec2Op, IArithmeticVal<IVec2I,IDoubleI>

  Abstract interface of 2 dimensional vector.
  Author:
    Satoru Sugihara

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `IVec2I` | `add(double x, double y)`
    `IVec2I` | `add(double f, IVec2I v)` scale add; alias
    `IVec2I` | `add(IDoubleI x, IDoubleI y)`
    `IVec2I` | `add(IDoubleI f, IVec2I v)` scale add; alias
    `IVec2I` | `add(IVec2I v)`
    `IVec2I` | `add(IVec2I v, double f)` scale add
    `IVec2I` | `add(IVec2I v, IDoubleI f)` scale add
    `double` | `angle(double vx, double vy)` angle between two vectors
    `double` | `angle(ISwitchE e, IVec2I v)` angle between two vectors
    `IDoubleI` | `angle(ISwitchR r, IVec2I v)` angle between two vectors
    `double` | `angle(IVec2I v)` angle between two vectors
    `IVec2I` | `bisect(double vx, double vy)` create a new instance of bisector
    `IVec2I` | `bisect(IVec2I v)` create a new instance of bisector
    `IVec2I` | `cp()` cp() is alias of dup()
    `IVec2I` | `cp(double x, double y)` cp() is alias of dup().add()
    `IVec2I` | `cp(IDoubleI x, IDoubleI y)` cp() is alias of dup().add()
    `IVec2I` | `cp(IVec2I v)` cp() is alias of dup().add()
    `IVecI` | `cross(double vx, double vy)` cross product, returning 3D vector
    `IVecI` | `cross(IVec2I v)` cross product, returning 3D vector
    `IVec2I` | `dif(double vx, double vy)` create a new instance of difference
    `IVec2I` | `dif(IVec2I v)` create a new instance of difference
    `IVec2I` | `diff(double vx, double vy)` alias of dif
    `IVec2I` | `diff(IVec2I v)` alias of dif
    `double` | `dist(double vx, double vy)` distance
    `double` | `dist(ISwitchE e, IVec2I v)` distance
    `IDoubleI` | `dist(ISwitchR r, IVec2I v)` distance
    `double` | `dist(IVec2I v)` distance
    `double` | `dist2(double vx, double vy)` squared distance
    `double` | `dist2(ISwitchE e, IVec2I v)` squared distance
    `IDoubleI` | `dist2(ISwitchR r, IVec2I v)` squared distance
    `double` | `dist2(IVec2I v)` squared distance
    `IVec2I` | `div(double v)`
    `IVec2I` | `div(IDoubleI v)`
    `double` | `dot(double vx, double vy)` dot product
    `double` | `dot(ISwitchE e, IVec2I v)` dot product
    `IDoubleI` | `dot(ISwitchR r, IVec2I v)` dot product
    `double` | `dot(IVec2I v)` dot product
    `IVec2I` | `dup()`
    `boolean` | `eq(double vx, double vy)` whether location is same or not
    `boolean` | `eq(double vx, double vy, double tolerance)` whether location is same or not with tolerance
    `boolean` | `eq(ISwitchE e, IVec2I v)` whether location is same or not
    `boolean` | `eq(ISwitchE e, IVec2I v, double tolerance)` whether location is same or not with tolerance
    `IBoolI` | `eq(ISwitchR r, IVec2I v)` whether location is same or not
    `IBoolI` | `eq(ISwitchR r, IVec2I v, IDoubleI tolerance)` whether location is same or not with tolerance
    `boolean` | `eq(IVec2I v)` whether location is same or not
    `boolean` | `eq(IVec2I v, double tolerance)` whether location is same or not with tolerance
    `boolean` | `eqX(double vx)` check if X is same
    `boolean` | `eqX(double vx, double tolerance)` check if X is same within tolerance
    `boolean` | `eqX(ISwitchE e, IVec2I v)` check if X is same
    `boolean` | `eqX(ISwitchE e, IVec2I v, double tolerance)` check if X is same within tolerance
    `IBoolI` | `eqX(ISwitchR r, IVec2I v)` check if X is same
    `IBoolI` | `eqX(ISwitchR r, IVec2I v, IDoubleI tolerance)` check if X is same within tolerance
    `boolean` | `eqX(IVec2I v)` check if X is same
    `boolean` | `eqX(IVec2I v, double tolerance)` check if X is same within tolerance
    `boolean` | `eqY(double vy)` check if Y is same
    `boolean` | `eqY(double vy, double tolerance)` check if Y is same within tolerance
    `boolean` | `eqY(ISwitchE e, IVec2I v)` check if Y is same
    `boolean` | `eqY(ISwitchE e, IVec2I v, double tolerance)` check if Y is same within tolerance
    `IBoolI` | `eqY(ISwitchR r, IVec2I v)` check if Y is same
    `IBoolI` | `eqY(ISwitchR r, IVec2I v, IDoubleI tolerance)` check if Y is same within tolerance
    `boolean` | `eqY(IVec2I v)` check if Y is same
    `boolean` | `eqY(IVec2I v, double tolerance)` check if Y is same within tolerance
    `IVec2I` | `flip()` alias of neg
    `IVec2` | `get()`
    `IDoubleI` | `getX()`
    `IDoubleI` | `getY()`
    `boolean` | `isValid()` check if the content of vector is valid; no NaN value
    `double` | `len()` getting length
    `IVec2I` | `len(double l)` setting length
    `IVec2I` | `len(IDoubleI l)` setting length
    `double` | `len(ISwitchE e)` getting length
    `IDoubleI` | `len(ISwitchR r)` getting length
    `double` | `len2()` getting squared length
    `double` | `len2(ISwitchE e)` getting squared length
    `IDoubleI` | `len2(ISwitchR r)` getting squared length
    `IVec2I` | `mid(double vx, double vy)` create a new instance of midpoint
    `IVec2I` | `mid(IVec2I v)` create a new instance of midpoint
    `IVec2I` | `mirror(double lineX, double lineY)` reflect (mirror) 2 dimensionally to the other side of the line
    `IVec2I` | `mirror(double centerX, double centerY, double lineX, double lineY)` reflect (mirror) 2 dimensionally to the other side of the line at a center
    `IVec2I` | `mirror(IVec2I lineDir)` reflect (mirror) 2 dimensionally to the other side of the line
    `IVec2I` | `mirror(IVec2I center, IVec2I lineDir)` reflect (mirror) 2 dimensionally to the other side of the line at a center
    `IVec2I` | `mul(double v)`
    `IVec2I` | `mul(IDoubleI v)`
    `IVec2I` | `mv(double x, double y)` mv() is alias of add()
    `IVec2I` | `mv(IDoubleI x, IDoubleI y)` mv() is alias of add()
    `IVec2I` | `mv(IVec2I v)` mv() is alias of add()
    `IVec2I` | `neg()`
    `IVecI` | `nml(double vx, double vy)` alias of cross
    `IVecI` | `nml(double vx1, double vy1, double vx2, double vy2)` create normal vector from 3 points of self, pt1 and pt2
    `IVecI` | `nml(IVec2I v)` alias of cross
    `IVecI` | `nml(IVec2I pt1, IVec2I pt2)` create normal vector from 3 points of self, pt1 and pt2
    `IVec2I` | `ortho()` rotate 90 deg
    `IVec2I` | `ref(double lineX, double lineY)` reflect (mirror) 2 dimensionally to the other side of the line
    `IVec2I` | `ref(double centerX, double centerY, double lineX, double lineY)` reflect (mirror) 2 dimensionally to the other side of the line at a center
    `IVec2I` | `ref(IVec2I lineDir)` reflect (mirror) 2 dimensionally to the other side of the line
    `IVec2I` | `ref(IVec2I center, IVec2I lineDir)` reflect (mirror) 2 dimensionally to the other side of the line at a center
    `IVec2I` | `rev()` alias of neg
    `IVec2I` | `rot(double angle)` rotation
    `IVec2I` | `rot(double centerX, double centerY, double angle)` rotation around a center
    `IVec2I` | `rot(IDoubleI angle)` rotation
    `IVec2I` | `rot(IVec2I destDir)` rotate towards destination direction
    `IVec2I` | `rot(IVec2I center, double angle)` rotation around a center
    `IVec2I` | `rot(IVec2I center, IDoubleI angle)` rotation around a center
    `IVec2I` | `rot(IVec2I center, IVec2I destPt)` rotate around a center towards destination point
    `IVec2I` | `scale(double f)` alias of mul
    `IVec2I` | `scale(double centerX, double centerY, double f)` scale from a center
    `IVec2I` | `scale(IDoubleI f)` alias of mul
    `IVec2I` | `scale(IVec2I center, double f)` scale from a center
    `IVec2I` | `scale(IVec2I center, IDoubleI f)` scale from a center
    `IVec2I` | `scale1d(double axisX, double axisY, double f)` scale only in 1 direction
    `IVec2I` | `scale1d(double centerX, double centerY, double axisX, double axisY, double f)` scale only in 1 direction from a center
    `IVec2I` | `scale1d(IVec2I axis, double f)` scale only in 1 direction
    `IVec2I` | `scale1d(IVec2I axis, IDoubleI f)` scale only in 1 direction
    `IVec2I` | `scale1d(IVec2I center, IVec2I axis, double f)` scale only in 1 direction from a center
    `IVec2I` | `scale1d(IVec2I center, IVec2I axis, IDoubleI f)` scale only in 1 direction from a center
    `IVec2I` | `set(double x, double y)`
    `IVec2I` | `set(IDoubleI x, IDoubleI y)`
    `IVec2I` | `set(IVec2I v)`
    `IVec2I` | `shear(double sxy, double syx)` shear operation on XY
    `IVec2I` | `shear(IDoubleI sxy, IDoubleI syx)` shear operation on XY
    `IVec2I` | `shear(IVec2I center, double sxy, double syx)` shear operation on XY
    `IVec2I` | `shear(IVec2I center, IDoubleI sxy, IDoubleI syx)` shear operation on XY
    `IVec2I` | `sub(double x, double y)`
    `IVec2I` | `sub(IDoubleI x, IDoubleI y)`
    `IVec2I` | `sub(IVec2I v)`
    `IVec2I` | `sum(double vx, double vy)` create a new instance of summation
    `IVec2I` | `sum(IVec2I... v)` create a new instance of summation
    `IVec2I` | `sum(IVec2I v)` create a new instance of summation
    `IVec2I` | `sum(IVec2I v2, double w2)` create a new instance of weighted sum
    `IVec2I` | `sum(IVec2I v2, double w1, double w2)` create a new instance of weighted sum
    `IVec2I` | `sum(IVec2I v2, IDoubleI w2)` create a new instance of weighted sum
    `IVec2I` | `sum(IVec2I v2, IDoubleI w1, IDoubleI w2)` create a new instance of weighted sum
    `IVecI` | `to3d()`
    `IVecI` | `to3d(double z)`
    `IVecI` | `to3d(IDoubleI w)`
    `IVec4I` | `to4d()`
    `IVec4I` | `to4d(double z, double w)`
    `IVec4I` | `to4d(IDoubleI z, IDoubleI w)`
    `IVec2I` | `transform(IMatrix2I mat)` transform with 2x2 transform matrix
    `IVec2I` | `transform(IMatrix3I mat)` transform with 3x3 transform matrix
    `IVec2I` | `transform(IVec2I xvec, IVec2I yvec)` transform with transform vectors
    `IVec2I` | `transform(IVec2I xvec, IVec2I yvec, IVec2I translate)` transform with transform vectors
    `IVec2I` | `translate(double x, double y)` alias of add()
    `IVec2I` | `translate(IDoubleI x, IDoubleI y)` alias of add()
    `IVec2I` | `translate(IVec2I v)` alias of add()
    `IVec2I` | `unit()` unitize
    `double` | `x()`
    `IVec2I` | `x(double vx)` setting x component
    `IVec2I` | `x(IDoubleI vx)` setting x component
    `double` | `x(ISwitchE e)` getting x component
    `IDoubleI` | `x(ISwitchR r)` getting x component
    `double` | `y()`
    `IVec2I` | `y(double vy)` setting y component
    `IVec2I` | `y(IDoubleI vy)` setting y component
    `double` | `y(ISwitchE e)` getting y component
    `IDoubleI` | `y(ISwitchR r)` getting y component
    `IVec2I` | `zero()` setting all zero

- - ### Method Detail

    - #### x

          double x()

    - #### y

          double y()

    - #### x

          IVec2I x(double vx)

      setting x component

    - #### y

          IVec2I y(double vy)

      setting y component

    - #### x

          IVec2I x(IDoubleI vx)

      setting x component

    - #### y

          IVec2I y(IDoubleI vy)

      setting y component

    - #### x

          double x(ISwitchE e)

      getting x component

    - #### y

          double y(ISwitchE e)

      getting y component

    - #### x

          IDoubleI x(ISwitchR r)

      getting x component

    - #### y

          IDoubleI y(ISwitchR r)

      getting y component

    - #### get

          IVec2 get()

      Specified by:
        `get` in interface `IParameter`
      Specified by:
        `get` in interface `IVec2Op`

    - #### dup

          IVec2I dup()

      Specified by:
        `dup` in interface `IArithmeticVal<IVec2I,IDoubleI>`

    - #### to3d

          IVecI to3d()

    - #### to3d

          IVecI to3d(double z)

    - #### to3d

          IVecI to3d(IDoubleI w)

    - #### to4d

          IVec4I to4d()

    - #### to4d

          IVec4I to4d(double z,
                    double w)

    - #### to4d

          IVec4I to4d(IDoubleI z,
                    IDoubleI w)

    - #### getX

          IDoubleI getX()

    - #### getY

          IDoubleI getY()

    - #### set

          IVec2I set(IVec2I v)

      Specified by:
        `set` in interface `IArithmeticVal<IVec2I,IDoubleI>`

    - #### set

          IVec2I set(double x,
                   double y)

    - #### set

          IVec2I set(IDoubleI x,
                   IDoubleI y)

    - #### add

          IVec2I add(double x,
                   double y)

    - #### add

          IVec2I add(IDoubleI x,
                   IDoubleI y)

    - #### add

          IVec2I add(IVec2I v)

      Specified by:
        `add` in interface `IArithmeticVal<IVec2I,IDoubleI>`

    - #### sub

          IVec2I sub(double x,
                   double y)

    - #### sub

          IVec2I sub(IDoubleI x,
                   IDoubleI y)

    - #### sub

          IVec2I sub(IVec2I v)

      Specified by:
        `sub` in interface `IArithmeticVal<IVec2I,IDoubleI>`

    - #### mul

          IVec2I mul(IDoubleI v)

      Specified by:
        `mul` in interface `IArithmeticVal<IVec2I,IDoubleI>`

    - #### mul

          IVec2I mul(double v)

    - #### div

          IVec2I div(IDoubleI v)

      Specified by:
        `div` in interface `IArithmeticVal<IVec2I,IDoubleI>`

    - #### div

          IVec2I div(double v)

    - #### neg

          IVec2I neg()

    - #### rev

          IVec2I rev()

      alias of neg

    - #### flip

          IVec2I flip()

      alias of neg

    - #### zero

          IVec2I zero()

      setting all zero
      Specified by:
        `zero` in interface `IArithmeticVal<IVec2I,IDoubleI>`

    - #### add

          IVec2I add(IVec2I v,
                   double f)

      scale add

    - #### add

          IVec2I add(IVec2I v,
                   IDoubleI f)

      scale add

    - #### add

          IVec2I add(double f,
                   IVec2I v)

      scale add; alias

    - #### add

          IVec2I add(IDoubleI f,
                   IVec2I v)

      scale add; alias

    - #### dot

          double dot(IVec2I v)

      dot product

    - #### dot

          double dot(double vx,
                   double vy)

      dot product

    - #### dot

          double dot(ISwitchE e,
                   IVec2I v)

      dot product

    - #### dot

          IDoubleI dot(ISwitchR r,
                     IVec2I v)

      dot product

    - #### cross

          IVecI cross(IVec2I v)

      cross product, returning 3D vector

    - #### cross

          IVecI cross(double vx,
                    double vy)

      cross product, returning 3D vector

    - #### len

          double len()

      getting length

    - #### len

          double len(ISwitchE e)

      getting length

    - #### len

          IDoubleI len(ISwitchR r)

      getting length

    - #### len2

          double len2()

      getting squared length

    - #### len2

          double len2(ISwitchE e)

      getting squared length

    - #### len2

          IDoubleI len2(ISwitchR r)

      getting squared length

    - #### len

          IVec2I len(IDoubleI l)

      setting length

    - #### len

          IVec2I len(double l)

      setting length

    - #### unit

          IVec2I unit()

      unitize

    - #### ortho

          IVec2I ortho()

      rotate 90 deg

    - #### dist

          double dist(IVec2I v)

      distance

    - #### dist

          double dist(double vx,
                    double vy)

      distance

    - #### dist

          double dist(ISwitchE e,
                    IVec2I v)

      distance

    - #### dist

          IDoubleI dist(ISwitchR r,
                      IVec2I v)

      distance

    - #### dist2

          double dist2(IVec2I v)

      squared distance

    - #### dist2

          double dist2(double vx,
                     double vy)

      squared distance

    - #### dist2

          double dist2(ISwitchE e,
                     IVec2I v)

      squared distance

    - #### dist2

          IDoubleI dist2(ISwitchR r,
                       IVec2I v)

      squared distance

    - #### eq

          boolean eq(IVec2I v)

      whether location is same or not

    - #### eq

          boolean eq(double vx,
                   double vy)

      whether location is same or not

    - #### eq

          boolean eq(ISwitchE e,
                   IVec2I v)

      whether location is same or not

    - #### eq

          IBoolI eq(ISwitchR r,
                  IVec2I v)

      whether location is same or not

    - #### eq

          boolean eq(IVec2I v,
                   double tolerance)

      whether location is same or not with tolerance

    - #### eq

          boolean eq(double vx,
                   double vy,
                   double tolerance)

      whether location is same or not with tolerance

    - #### eq

          boolean eq(ISwitchE e,
                   IVec2I v,
                   double tolerance)

      whether location is same or not with tolerance

    - #### eq

          IBoolI eq(ISwitchR r,
                  IVec2I v,
                  IDoubleI tolerance)

      whether location is same or not with tolerance

    - #### eqX

          boolean eqX(IVec2I v)

      check if X is same

    - #### eqY

          boolean eqY(IVec2I v)

      check if Y is same

    - #### eqX

          boolean eqX(double vx)

      check if X is same

    - #### eqY

          boolean eqY(double vy)

      check if Y is same

    - #### eqX

          boolean eqX(ISwitchE e,
                    IVec2I v)

      check if X is same

    - #### eqY

          boolean eqY(ISwitchE e,
                    IVec2I v)

      check if Y is same

    - #### eqX

          IBoolI eqX(ISwitchR r,
                   IVec2I v)

      check if X is same

    - #### eqY

          IBoolI eqY(ISwitchR r,
                   IVec2I v)

      check if Y is same

    - #### eqX

          boolean eqX(IVec2I v,
                    double tolerance)

      check if X is same within tolerance

    - #### eqY

          boolean eqY(IVec2I v,
                    double tolerance)

      check if Y is same within tolerance

    - #### eqX

          boolean eqX(double vx,
                    double tolerance)

      check if X is same within tolerance

    - #### eqY

          boolean eqY(double vy,
                    double tolerance)

      check if Y is same within tolerance

    - #### eqX

          boolean eqX(ISwitchE e,
                    IVec2I v,
                    double tolerance)

      check if X is same within tolerance

    - #### eqY

          boolean eqY(ISwitchE e,
                    IVec2I v,
                    double tolerance)

      check if Y is same within tolerance

    - #### eqX

          IBoolI eqX(ISwitchR r,
                   IVec2I v,
                   IDoubleI tolerance)

      check if X is same within tolerance

    - #### eqY

          IBoolI eqY(ISwitchR r,
                   IVec2I v,
                   IDoubleI tolerance)

      check if Y is same within tolerance

    - #### angle

          double angle(IVec2I v)

      angle between two vectors

    - #### angle

          double angle(double vx,
                     double vy)

      angle between two vectors

    - #### angle

          double angle(ISwitchE e,
                     IVec2I v)

      angle between two vectors

    - #### angle

          IDoubleI angle(ISwitchR r,
                       IVec2I v)

      angle between two vectors

    - #### rot

          IVec2I rot(double angle)

      rotation

    - #### rot

          IVec2I rot(IDoubleI angle)

      rotation

    - #### rot

          IVec2I rot(IVec2I center,
                   double angle)

      rotation around a center

    - #### rot

          IVec2I rot(double centerX,
                   double centerY,
                   double angle)

      rotation around a center

    - #### rot

          IVec2I rot(IVec2I center,
                   IDoubleI angle)

      rotation around a center

    - #### rot

          IVec2I rot(IVec2I destDir)

      rotate towards destination direction

    - #### rot

          IVec2I rot(IVec2I center,
                   IVec2I destPt)

      rotate around a center towards destination point

    - #### scale

          IVec2I scale(IDoubleI f)

      alias of mul

    - #### scale

          IVec2I scale(double f)

      alias of mul

    - #### scale

          IVec2I scale(IVec2I center,
                     IDoubleI f)

      scale from a center

    - #### scale

          IVec2I scale(IVec2I center,
                     double f)

      scale from a center

    - #### scale

          IVec2I scale(double centerX,
                     double centerY,
                     double f)

      scale from a center

    - #### scale1d

          IVec2I scale1d(IVec2I axis,
                       double f)

      scale only in 1 direction

    - #### scale1d

          IVec2I scale1d(IVec2I axis,
                       IDoubleI f)

      scale only in 1 direction

    - #### scale1d

          IVec2I scale1d(double axisX,
                       double axisY,
                       double f)

      scale only in 1 direction

    - #### scale1d

          IVec2I scale1d(IVec2I center,
                       IVec2I axis,
                       double f)

      scale only in 1 direction from a center

    - #### scale1d

          IVec2I scale1d(IVec2I center,
                       IVec2I axis,
                       IDoubleI f)

      scale only in 1 direction from a center

    - #### scale1d

          IVec2I scale1d(double centerX,
                       double centerY,
                       double axisX,
                       double axisY,
                       double f)

      scale only in 1 direction from a center

    - #### ref

          IVec2I ref(IVec2I lineDir)

      reflect (mirror) 2 dimensionally to the other side of the line

    - #### ref

          IVec2I ref(double lineX,
                   double lineY)

      reflect (mirror) 2 dimensionally to the other side of the line

    - #### ref

          IVec2I ref(IVec2I center,
                   IVec2I lineDir)

      reflect (mirror) 2 dimensionally to the other side of the line at a center

    - #### ref

          IVec2I ref(double centerX,
                   double centerY,
                   double lineX,
                   double lineY)

      reflect (mirror) 2 dimensionally to the other side of the line at a center

    - #### mirror

          IVec2I mirror(IVec2I lineDir)

      reflect (mirror) 2 dimensionally to the other side of the line

    - #### mirror

          IVec2I mirror(double lineX,
                      double lineY)

      reflect (mirror) 2 dimensionally to the other side of the line

    - #### mirror

          IVec2I mirror(IVec2I center,
                      IVec2I lineDir)

      reflect (mirror) 2 dimensionally to the other side of the line at a center

    - #### mirror

          IVec2I mirror(double centerX,
                      double centerY,
                      double lineX,
                      double lineY)

      reflect (mirror) 2 dimensionally to the other side of the line at a center

    - #### shear

          IVec2I shear(double sxy,
                     double syx)

      shear operation on XY

    - #### shear

          IVec2I shear(IDoubleI sxy,
                     IDoubleI syx)

      shear operation on XY

    - #### shear

          IVec2I shear(IVec2I center,
                     double sxy,
                     double syx)

      shear operation on XY

    - #### shear

          IVec2I shear(IVec2I center,
                     IDoubleI sxy,
                     IDoubleI syx)

      shear operation on XY

    - #### translate

          IVec2I translate(double x,
                         double y)

      alias of add()

    - #### translate

          IVec2I translate(IDoubleI x,
                         IDoubleI y)

      alias of add()

    - #### translate

          IVec2I translate(IVec2I v)

      alias of add()

    - #### transform

          IVec2I transform(IMatrix2I mat)

      transform with 2x2 transform matrix

    - #### transform

          IVec2I transform(IMatrix3I mat)

      transform with 3x3 transform matrix

    - #### transform

          IVec2I transform(IVec2I xvec,
                         IVec2I yvec)

      transform with transform vectors

    - #### transform

          IVec2I transform(IVec2I xvec,
                         IVec2I yvec,
                         IVec2I translate)

      transform with transform vectors

    - #### mv

          IVec2I mv(double x,
                  double y)

      mv() is alias of add()

    - #### mv

          IVec2I mv(IDoubleI x,
                  IDoubleI y)

      mv() is alias of add()

    - #### mv

          IVec2I mv(IVec2I v)

      mv() is alias of add()

    - #### cp

          IVec2I cp()

      cp() is alias of dup()
      Specified by:
        `cp` in interface `IArithmeticVal<IVec2I,IDoubleI>`

    - #### cp

          IVec2I cp(double x,
                  double y)

      cp() is alias of dup().add()

    - #### cp

          IVec2I cp(IDoubleI x,
                  IDoubleI y)

      cp() is alias of dup().add()

    - #### cp

          IVec2I cp(IVec2I v)

      cp() is alias of dup().add()

    - #### dif

          IVec2I dif(IVec2I v)

      create a new instance of difference

    - #### dif

          IVec2I dif(double vx,
                   double vy)

      create a new instance of difference

    - #### diff

          IVec2I diff(IVec2I v)

      alias of dif

    - #### diff

          IVec2I diff(double vx,
                    double vy)

      alias of dif

    - #### mid

          IVec2I mid(IVec2I v)

      create a new instance of midpoint

    - #### mid

          IVec2I mid(double vx,
                   double vy)

      create a new instance of midpoint

    - #### sum

          IVec2I sum(IVec2I v)

      create a new instance of summation

    - #### sum

          IVec2I sum(double vx,
                   double vy)

      create a new instance of summation

    - #### sum

          IVec2I sum(IVec2I... v)

      create a new instance of summation

    - #### bisect

          IVec2I bisect(IVec2I v)

      create a new instance of bisector

    - #### bisect

          IVec2I bisect(double vx,
                      double vy)

      create a new instance of bisector

    - #### sum

          IVec2I sum(IVec2I v2,
                   double w1,
                   double w2)

      create a new instance of weighted sum

    - #### sum

          IVec2I sum(IVec2I v2,
                   double w2)

      create a new instance of weighted sum

    - #### sum

          IVec2I sum(IVec2I v2,
                   IDoubleI w1,
                   IDoubleI w2)

      create a new instance of weighted sum

    - #### sum

          IVec2I sum(IVec2I v2,
                   IDoubleI w2)

      create a new instance of weighted sum

    - #### nml

          IVecI nml(IVec2I v)

      alias of cross

    - #### nml

          IVecI nml(double vx,
                  double vy)

      alias of cross

    - #### nml

          IVecI nml(IVec2I pt1,
                  IVec2I pt2)

      create normal vector from 3 points of self, pt1 and pt2

    - #### nml

          IVecI nml(double vx1,
                  double vy1,
                  double vx2,
                  double vy2)

      create normal vector from 3 points of self, pt1 and pt2

    - #### isValid

          boolean isValid()

      check if the content of vector is valid; no NaN value