igeo

## Class IVec

- java.lang.Object
- - igeo.IParameterObject
  - - igeo.IVec

- All Implemented Interfaces:
    IArithmeticVal<IVecI,IDoubleI>, IEntityParameter, IParameter, ISubobject, ITransformable, IVal, IVecI, IVecOp
  Direct Known Subclasses:
    IVec4

      public class IVec
      extends IParameterObject
      implements IVecI, IEntityParameter

  Class of 3 dimensional vector.
  Author:
    Satoru Sugihara

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static IVec` | `origin`
    `double` | `x`
    `static IVec` | `xaxis`
    `double` | `y`
    `static IVec` | `yaxis`
    `double` | `z`
    `static IVec` | `zaxis`

    - ### Fields inherited from class igeo.IParameterObject

      `parent`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `IVec()`
    `IVec(double x, double y)`
    `IVec(double x, double y, double z)`
    `IVec(IDoubleI x, IDoubleI y, IDoubleI z)`
    `IVec(IServerI s)`
    `IVec(IServerI s, double x, double y)`
    `IVec(IServerI s, double x, double y, double z)`
    `IVec(IServerI s, IDoubleI x, IDoubleI y, IDoubleI z)`
    `IVec(IServerI s, IVec v)`
    `IVec(IServerI s, IVec2I v)`
    `IVec(IServerI s, IVecI v)`
    `IVec(IVec v)`
    `IVec(IVec2I v)`
    `IVec(IVecI v)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `IVec` | `add(double x, double y, double z)`
    `IVec` | `add(double f, IVec v)` scale add; alias of add(IVec,double)
    `IVec` | `add(double f, IVecI v)` scale add; alias of add(IVecI,double)
    `IVec` | `add(IDoubleI x, IDoubleI y, IDoubleI z)`
    `IVec` | `add(IDoubleI f, IVecI v)` scale add; alias of add(IVec,IDouble)
    `IVec` | `add(IVec v)`
    `IVec` | `add(IVec v, double f)` scale add
    `IVec` | `add(IVecI v)`
    `IVec` | `add(IVecI v, double f)` scale add
    `IVec` | `add(IVecI v, IDoubleI f)` scale add
    `double` | `angle(double vx, double vy, double vz)` angle in radian, ranging from 0 to Pi
    `double` | `angle(double vx, double vy, double vz, double axisX, double axisY, double axisZ)` angle in radian, with reference axis to decide which is negative direction, ranging from -Pi to Pi angle is not measured on the plane of axis.
    `double` | `angle(ISwitchE e, IVecI v)` angle in radian, ranging from 0 to Pi
    `double` | `angle(ISwitchE e, IVecI v, IVecI axis)` angle in radian, with reference axis to decide which is negative direction, ranging from -Pi to Pi angle is not measured on the plane of axis.
    `IDouble` | `angle(ISwitchR r, IVecI v)` angle in radian, ranging from 0 to Pi
    `IDouble` | `angle(ISwitchR r, IVecI v, IVecI axis)` angle in radian, with reference axis to decide which is negative direction, ranging from -Pi to Pi angle is not measured on the plane of axis.
    `double` | `angle(IVec v)` angle in radian, ranging from 0 to Pi
    `double` | `angle(IVecI v)` angle in radian, ranging from 0 to Pi
    `double` | `angle(IVecI v, IVecI axis)` angle in radian, with reference axis to decide which is negative direction, ranging from -Pi to Pi angle is not measured on the plane of axis.
    `static double` | `angle(IVecI pt1, IVecI pt2, IVecI pt3)` measure angle of polyline of pt1, pt2 and pt3 at pt2, which is equivalent to measure angle between vectors from pt2 to pt1 and pt2 to pt3.
    `double` | `angle(IVec v, IVec axis)` angle in radian, with reference axis to decide which is negative direction, ranging from -Pi to Pi angle is not measured on the plane of axis.
    `double` | `angleOnPlane(ISwitchE e, IVecI v, IVecI planeDir)` angle of two vector on a specified plane
    `double` | `angleOnPlane(ISwitchE e, IVecI pt, IVecI planeCenter, IVecI planeDir)` angle of two points on a specified plane around the center
    `IDouble` | `angleOnPlane(ISwitchR r, IVecI v, IVecI planeDir)` angle of two vector on a specified plane
    `IDouble` | `angleOnPlane(ISwitchR r, IVecI pt, IVecI planeCenter, IVecI planeDir)` angle of two points on a specified plane around the center
    `double` | `angleOnPlane(IVecI v, IVecI planeDir)` angle of two vector on a specified plane
    `double` | `angleOnPlane(IVecI pt, IVecI planeCenter, IVecI planeDir)` angle of two points on a specified plane around the center
    `double` | `angleOnPlane(IVec v, IVec planeDir)` angle of two vector on a specified plane
    `double` | `angleOnPlane(IVec pt, IVec planeCenter, IVec planeDir)` angle of two points on a specified plane around the center
    `static double` | `area(IVecI pt1, IVecI pt2, IVecI pt3)` area of a triangle
    `static IVec` | `averageNormal(IVecI[] pts)` average normal of point array in form of a polyline.
    `static IVec` | `averageNormal(IVecI[][] pts)` average normal of point array in form of a matrix.
    `IVec` | `bisect(double vx, double vy, double vz)` create a new instance of bisector
    `IVec` | `bisect(IVec v)` create a new instance of bisector
    `IVec` | `bisect(IVecI v)` create a new instance of bisector
    `static IVec[]` | `bisectPlane(IVec planeDir1, IVec planePt1, IVec planeDir2, IVec planePt2)` bisector plane of two planes
    `static IVec` | `center(IVecI... v)` calculating centetr of multiple points
    `static IVec` | `circumcenter(IVecI pt1, IVecI pt2, IVecI pt3)` calculate circumcenter; center of circumcircle
    `static IVec[]` | `closestPointsOn2Lines(IVecI lineDir1, IVecI linePt1, IVecI lineDir2, IVecI linePt2)` find two closest points on two infinete lines in a skew relationship, which makes a segment perpendicular to two lines
    `IVec` | `cp()` cp() is alias of dup()
    `IVec` | `cp(double vx, double vy, double vz)` cp() is alias of dup().add()
    `IVec` | `cp(IDoubleI vx, IDoubleI vy, IDoubleI vz)` cp() is alias of dup().add()
    `IVec` | `cp(IVec v)` cp() is alias of dup().add()
    `IVec` | `cp(IVecI v)` cp() is alias of dup().add()
    `IVec` | `cross(double vx, double vy, double vz)` cross product.
    `IVec` | `cross(IVec v)` cross product.
    `IVec` | `cross(IVecI v)` cross product, creating a new instance
    `IVec[]` | `decompose(IVecI uaxis, IVecI vaxis)` decompose the vector to two input vectors and another perpendicular vector of those two and returns three decomposed vector.
    `IVec` | `dif(double vx, double vy, double vz)` create a new instance of difference
    `IVec` | `dif(IVec v)` create a new instance of difference
    `IVec` | `dif(IVecI v)` create a new instance of difference
    `IVec` | `diff(double vx, double vy, double vz)` create a new instance of difference
    `IVec` | `diff(IVec v)` create a new instance of difference
    `IVec` | `diff(IVecI v)` create a new instance of difference
    `double` | `dist(double vx, double vy, double vz)` get distance between two vectors
    `double` | `dist(ISwitchE e, IVecI v)` get distance between two vectors
    `IDouble` | `dist(ISwitchR r, IVecI v)` get distance between two vectors
    `double` | `dist(IVec v)` get distance between two vectors
    `double` | `dist(IVecI v)` get distance between two vectors
    `double` | `dist2(double vx, double vy, double vz)` get squared distance between two vectors
    `double` | `dist2(ISwitchE e, IVecI v)` get squared distance between two vectors
    `IDouble` | `dist2(ISwitchR r, IVecI v)` get squared distance between two vectors
    `double` | `dist2(IVec v)` get squared distance between two vectors
    `double` | `dist2(IVecI v)` get squared distance between two vectors
    `static double` | `distBetween2Lines(IVecI lineDir1, IVecI linePt1, IVecI lineDir2, IVecI linePt2)`
    `double` | `distToLine(IVecI lineDir)` distance to a line dir
    `double` | `distToLine(IVecI lineDir, IVecI linePt)` distance to an infinite line
    `double` | `distToPlane(IVecI planeDir, IVecI planePt)` distance to a plane
    `double` | `distToSegment(IVecI linePt1, IVecI linePt2)` distance to a line segment
    `double` | `distToTriangle(IVecI pt1, IVecI pt2, IVecI pt3)` distance to a triangle
    `IVec` | `div(double v)`
    `IVec` | `div(IDouble v)`
    `IVec` | `div(IDoubleI v)`
    `double` | `dot(double vx, double vy, double vz)` dot product in double
    `double` | `dot(ISwitchE e, IVecI v)` dot product in double
    `IDouble` | `dot(ISwitchR r, IVecI v)` dot product in IDouble
    `double` | `dot(IVec v)` dot product in double
    `double` | `dot(IVecI v)` dot product in double
    `IVec` | `dup()` duplicate the instance
    `boolean` | `eq(double vx, double vy, double vz)` check if 2 vectors are same by distance
    `boolean` | `eq(double vx, double vy, double vz, double tolerance)` check if 2 vectors are same by distance with tolerace
    `boolean` | `eq(ISwitchE e, IVecI v)` check if 2 vectors are same by distance
    `boolean` | `eq(ISwitchE e, IVecI v, double tolerance)` check if 2 vectors are same by distance with tolerace
    `IBool` | `eq(ISwitchR r, IVecI v)` check if 2 vectors are same by distance
    `IBool` | `eq(ISwitchR r, IVecI v, IDoubleI tolerance)` check if 2 vectors are same by distance with tolerace
    `boolean` | `eq(IVec v)` check if 2 vectors are same by distance
    `boolean` | `eq(IVec v, double tolerance)` check if 2 vectors are same by distance with tolerace
    `boolean` | `eq(IVecI v)` check if 2 vectors are same by distance
    `boolean` | `eq(IVecI v, double tolerance)` check if 2 vectors are same by distance with tolerace
    `boolean` | `eqX(double vx)` check if 2 vectors are same in X
    `boolean` | `eqX(double vx, double tolerance)` check if same in X with tolerance
    `boolean` | `eqX(ISwitchE e, IVecI v)` check if 2 vectors are same in X
    `boolean` | `eqX(ISwitchE e, IVecI v, double tolerance)` check if same in X with tolerance
    `IBool` | `eqX(ISwitchR r, IVecI v)` check if 2 vectors are same in X
    `IBool` | `eqX(ISwitchR r, IVecI v, IDoubleI tolerance)` check if same in X with tolerance
    `boolean` | `eqX(IVec v)` check if 2 vectors are same in X
    `boolean` | `eqX(IVec v, double tolerance)`
    `boolean` | `eqX(IVecI v)` check if 2 vectors are same in X
    `boolean` | `eqX(IVecI v, double tolerance)` check if same in X with tolerance
    `boolean` | `eqY(double vy)` check if 2 vectors are same in Y
    `boolean` | `eqY(double vy, double tolerance)` check if same in Y with tolerance
    `boolean` | `eqY(ISwitchE e, IVecI v)` check if 2 vectors are same in Y
    `boolean` | `eqY(ISwitchE e, IVecI v, double tolerance)` check if same in Y with tolerance
    `IBool` | `eqY(ISwitchR r, IVecI v)` check if 2 vectors are same in Y
    `IBool` | `eqY(ISwitchR r, IVecI v, IDoubleI tolerance)` check if same in Y with tolerance
    `boolean` | `eqY(IVec v)` check if 2 vectors are same in Y
    `boolean` | `eqY(IVec v, double tolerance)`
    `boolean` | `eqY(IVecI v)` check if 2 vectors are same in Y
    `boolean` | `eqY(IVecI v, double tolerance)` check if same in Y with tolerance
    `boolean` | `eqZ(double vz)` check if 2 vectors are same in Z
    `boolean` | `eqZ(double vz, double tolerance)` check if same in Z with tolerance
    `boolean` | `eqZ(ISwitchE e, IVecI v)` check if 2 vectors are same in Z
    `boolean` | `eqZ(ISwitchE e, IVecI v, double tolerance)` check if same in Z with tolerance
    `IBool` | `eqZ(ISwitchR r, IVecI v)` check if 2 vectors are same in Z
    `IBool` | `eqZ(ISwitchR r, IVecI v, IDoubleI tolerance)` check if same in Z with tolerance
    `boolean` | `eqZ(IVec v)` check if 2 vectors are same in Z
    `boolean` | `eqZ(IVec v, double tolerance)`
    `boolean` | `eqZ(IVecI v)` check if 2 vectors are same in Z
    `boolean` | `eqZ(IVecI v, double tolerance)` check if same in Z with tolerance
    `IVec` | `flip()` alias of neg()
    `IVec` | `get()`
    `static IVec` | `getNormal(double vx1, double vy1, double vz1, double vx2, double vy2, double vz2, double vx3, double vy3, double vz3)`
    `IVecI` | `getNormal(IVecI pt2, IVecI pt3)` alias of nml
    `static IVecI` | `getNormal(IVecI pt1, IVecI pt2, IVecI pt3)` create normal vector from 3 points
    `IVec` | `getNormal(IVec pt2, IVec pt3)` alias of nml
    `static IVec` | `getNormal(IVec pt1, IVec pt2, IVec pt3)` create normal vector from 3 points
    `IDouble` | `getX()`
    `IDouble` | `getY()`
    `IDouble` | `getZ()`
    `IVec` | `icross(double vx, double vy, double vz)` cross product, changing its values by itself.
    `IVec` | `icross(IVec v)` cross product, changing its values by itself.
    `IVec` | `icross(IVecI v)` cross product, changing its values by itself.
    `static IVec` | `intersect(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2)` intersection of two infinite lines.
    `static IVec` | `intersect(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2, double tolerance)` intersection of two infinite lines.
    `static IVec` | `intersect(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2)` intersection of two infinite lines.
    `static IVec` | `intersect(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2, double tolerance)` intersection of two infinite lines.
    `static IVec[]` | `intersectCircle(IVec circleNormal1, IVec circleCenter1, double radius1, IVec circleNormal2, IVec circleCenter2, double radius2)`
    `static IVec[]` | `intersectCircleAndSphere(IVec circleNormal, IVec circleCenter, double circleRadius, IVec sphereCenter, double sphereRadius)`
    `static IVec` | `intersectInfiniteLine(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2)` intersect infinite lines; alias of intersect()
    `static IVec` | `intersectInfiniteLine(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2, double tolerance)` intersect infinite lines; alias of intersect()
    `static IVec` | `intersectInfiniteLine(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2)` intersect infinite lines; alias of intersect()
    `static IVec` | `intersectInfiniteLine(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2, double tolerance)` intersect infinite lines; alias of intersect()
    `static IVec` | `intersectInfiniteLines(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2)` intersect infinite lines; alias of intersect()
    `static IVec` | `intersectInfiniteLines(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2, double tolerance)` intersect infinite lines; alias of intersect()
    `static IVec` | `intersectInfiniteLines(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2)` intersect infinite lines; alias of intersect()
    `static IVec` | `intersectInfiniteLines(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2, double tolerance)` intersect infinite lines; alias of intersect()
    `static IVec` | `intersectInfLine(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2)` intersect infinite lines; alias of intersect()
    `static IVec` | `intersectInfLine(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2, double tolerance)` intersect infinite lines; alias of intersect()
    `static IVec` | `intersectInfLine(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2)` intersect infinite lines; alias of intersect()
    `static IVec` | `intersectInfLine(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2, double tolerance)` intersect infinite lines; alias of intersect()
    `static IVec` | `intersectInfLines(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2)` intersect infinite lines; alias of intersect()
    `static IVec` | `intersectInfLines(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2, double tolerance)` intersect infinite lines; alias of intersect()
    `static IVec` | `intersectInfLines(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2)` intersect infinite lines; alias of intersect()
    `static IVec` | `intersectInfLines(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2, double tolerance)` intersect infinite lines; alias of intersect()
    `static IVec` | `intersectLine(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2)` intersection of line segments; alias of intersectSegment
    `static IVec` | `intersectLine(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2, double tolerance)`
    `static IVec` | `intersectLine(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2)`
    `static IVec` | `intersectLine(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2, double tolerance)`
    `static IVec[]` | `intersectLineAndSphere(IVec lineDir, IVec linePt, IVec center, double radius)` intersection between an infinite line and a sphere.
    `static IVec` | `intersectLines(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2)` intersection of line segments; alias of intersectSegment
    `static IVec` | `intersectLines(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2, double tolerance)`
    `static IVec` | `intersectLines(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2)`
    `static IVec` | `intersectLines(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2, double tolerance)`
    `static IVec` | `intersectPlane(IVec plane1Dir, IVec plane2Dir)` intersection of two planes at the origin.
    `static IVec[]` | `intersectPlane(IVec plane1Dir, IVec plane1Pt, IVec plane2Dir, IVec plane2Pt)` intersection of two planes.
    `static IVec[]` | `intersectPlane(IVec plane1Pt1, IVec plane1Pt2, IVec plane1Pt3, IVec plane2Pt1, IVec plane2Pt2, IVec plane2Pt3)` intersection of two planes
    `static IVec` | `intersectPlaneAndLine(IVec planeDir, IVec lineDir, IVec linePt)` intersection of one plane at the origin and one infinite line
    `static IVec` | `intersectPlaneAndLine(IVec planeDir, IVec planePt, IVec lineDir, IVec linePt)` intersection of one plane and one infinite line
    `static IVec` | `intersectPlaneAndLine(IVec planePt1, IVec planePt2, IVec planePt3, IVec linePt1, IVec linePt2)` intersection of one plane and one infinite line
    `static IVec` | `intersectPlaneAndSegment(IVec planeDir, IVec linePt1, IVec linePt2)` intersection of one plane at the origin and one line segment.
    `static IVec` | `intersectPlaneAndSegment(IVec planeDir, IVec planePt, IVec linePt1, IVec linePt2)` intersection of one plane and one line segment.
    `static IVec[]` | `intersectPlaneAndSphere(IVec planeDir, IVec planePt, IVec sphereCenter, double sphereRadius)` intersection circle of a plane and a sphere.
    `static IVec` | `intersectSeg(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2)` intersection of line segments; alias of intersectSegment
    `static IVec` | `intersectSeg(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2, double tolerance)`
    `static IVec` | `intersectSeg(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2)`
    `static IVec` | `intersectSeg(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2, double tolerance)`
    `static IVec` | `intersectSegment(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2)`
    `static IVec` | `intersectSegment(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2, double tolerance)`
    `static IVec` | `intersectSegment(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2)` intersection of line segments.
    `static IVec` | `intersectSegment(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2, double tolerance)` intersection of line segments.
    `static IVec` | `intersectSegments(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2)` intersection of line segments; alias of intersectSegment
    `static IVec` | `intersectSegments(IVecI line1Pt1, IVecI line1Pt2, IVecI line2Pt1, IVecI line2Pt2, double tolerance)`
    `static IVec` | `intersectSegments(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2)`
    `static IVec` | `intersectSegments(IVec line1Pt1, IVec line1Pt2, IVec line2Pt1, IVec line2Pt2, double tolerance)`
    `static IVec[]` | `intersectSphere(IVec sphereCenter1, double radius1, IVec sphereCenter2, double radius2)` intersection circle of two spheres
    `static boolean` | `isArrayEqual(IVec[] pts1, IVec[] pts2, boolean cyclic, boolean reverse)`
    `static boolean` | `isArrayEqual(IVec[] pts1, IVec[] pts2, boolean cyclic, boolean reverse, double tolerance)`
    `static boolean` | `isFlat(IVecI[] pts)`
    `static boolean` | `isFlat(IVecI[] pts, double tolerance)`
    `static boolean` | `isFlat(IVecI pt1, IVecI pt2, IVecI pt3, IVecI pt4)`
    `static boolean` | `isFlat(IVecI pt1, IVecI pt2, IVecI pt3, IVecI pt4, double tolerance)`
    `boolean` | `isInside2d(IVec2I[] pts)`
    `boolean` | `isInside2d(IVecI[] pts)`
    `boolean` | `isInside2d(IVecI projectionDir, IVec2I[] pts)`
    `boolean` | `isInside2d(IVecI projectionDir, IVecI[] pts)`
    `boolean` | `isInsideTriangle(IVecI pt1, IVecI pt2, IVecI pt3)`
    `boolean` | `isOnLine(IVecI v1, IVecI v2)` determine if it's on & inside the line
    `boolean` | `isOnLine(IVecI v1, IVecI v2, double tolerance)` determine if it's on & inside the line
    `boolean` | `isOnPlane(IVecI planeDir, IVecI planePt)`
    `boolean` | `isOnPlane(IVecI planeDir, IVecI planePt, double tolerance)`
    `boolean` | `isOnPlane(IVecI planePt1, IVecI planePt2, IVecI planePt3)`
    `boolean` | `isOnPlane(IVecI planePt1, IVecI planePt2, IVecI planePt3, double tolerance)`
    `boolean` | `isOnSegment(IVecI v1, IVecI v2)` alias of isOnLine
    `boolean` | `isOnSegment(IVecI v1, IVecI v2, double tolerance)` alias of isOnLine
    `boolean` | `isOnTriangle(IVecI pt1, IVecI pt2, IVecI pt3)`
    `boolean` | `isOnTriangle(IVecI pt1, IVecI pt2, IVecI pt3, double tolerance)`
    `boolean` | `isParallel(IVecI v)`
    `boolean` | `isParallel(IVecI v, double angleTolerance)`
    `boolean` | `isPerpendicular(IVecI v)`
    `boolean` | `isPerpendicular(IVecI v, double angleTolerance)`
    `static boolean` | `isStraight(IVecI[] pts)`
    `static boolean` | `isStraight(IVecI[] pts, double tolerance)` static methods
    `boolean` | `isStraight(IVecI v1, IVecI v2)`
    `boolean` | `isStraight(IVecI v1, IVecI v2, double tolerance)`
    `boolean` | `isValid()` checking x, y, and z is valid number (not Infinite, nor NaN).
    `double` | `len()` get length of the vector
    `IVec` | `len(double l)` set length of the vector
    `IVec` | `len(IDoubleI l)` set length of the vector
    `double` | `len(ISwitchE e)` get length of the vector
    `IDouble` | `len(ISwitchR r)` get length of the vector
    `double` | `len2()` get squared length of the vector
    `double` | `len2(ISwitchE e)` get squared length of the vector
    `IDouble` | `len2(ISwitchR r)` get squared length of the vector
    `IVec` | `mid(double vx, double vy, double vz)` create a new instance of midpoint
    `IVec` | `mid(IVec v)` create a new instance of midpoint
    `IVec` | `mid(IVecI v)` create a new instance of midpoint
    `IVec` | `mirror(double planeX, double planeY, double planeZ)` alias of ref
    `IVec` | `mirror(double centerX, double centerY, double centerZ, double planeX, double planeY, double planeZ)` alias of ref
    `IVec` | `mirror(IVec planeDir)` alias of ref
    `IVec` | `mirror(IVecI planeDir)` alias of ref
    `IVec` | `mirror(IVecI center, IVecI planeDir)` alias of ref
    `IVec` | `mirror(IVec center, IVec planeDir)` alias of ref
    `IVec` | `mul(double v)`
    `IVec` | `mul(IDouble v)`
    `IVec` | `mul(IDoubleI v)`
    `IVec` | `mv(double vx, double vy, double vz)` mv() is alias of add()
    `IVec` | `mv(IDoubleI vx, IDoubleI vy, IDoubleI vz)` mv() is alias of add()
    `IVec` | `mv(IVecI v)` mv() is alias of add()
    `IVec` | `neg()`
    `IVec` | `nml(double vx, double vy, double vz)` alias of cross.
    `IVec` | `nml(double vx1, double vy1, double vz1, double vx2, double vy2, double vz2)` create normal vector from 3 points of self, pt1 and pt2 (not unitized)
    `static IVec` | `nml(double vx1, double vy1, double vz1, double vx2, double vy2, double vz2, double vx3, double vy3, double vz3)` create normal vector from 3 points
    `IVec` | `nml(IVec v)` alias of cross.
    `IVec` | `nml(IVecI v)` alias of cross.
    `IVec` | `nml(IVecI pt1, IVecI pt2)` create normal vector from 3 points of self, pt1 and pt2 (not unitized)
    `static IVecI` | `nml(IVecI pt1, IVecI pt2, IVecI pt3)` create normal vector from 3 points
    `IVec` | `nml(IVec pt1, IVec pt2)` create normal vector from 3 points of self, pt1 and pt2 (not unitized)
    `static IVec` | `nml(IVec pt1, IVec pt2, IVec pt3)` create normal vector from 3 points
    `static IVec[]` | `offset(IVec[] pts, double width)`
    `static IVec[]` | `offset(IVec[] pts, double width, boolean closed)`
    `static IVec[]` | `offset(IVec[] pts, double width, IVecI planeNormal)`
    `static IVec[]` | `offset(IVec[] pts, double width, IVecI[] normals)`
    `static IVec[]` | `offset(IVec[] pts, double width, IVecI[] normals, boolean closed)`
    `static IVec[]` | `offset(IVec[] pts, double width, IVecI planeNormal, boolean closed)`
    `static IVecI[]` | `offset(IVecI[] pts, double width)` offset without normal vector.
    `static IVecI[]` | `offset(IVecI[] pts, double width, boolean closed)`
    `static IVecI[]` | `offset(IVecI[] pts, double width, IVecI planeNormal)` offset with one normal vector
    `static IVecI[]` | `offset(IVecI[] pts, double width, IVecI[] normals)` offset with array of normal vectors
    `static IVecI[]` | `offset(IVecI[] pts, double width, IVecI[] normals, boolean closed)`
    `static IVecI[]` | `offset(IVecI[] pts, double width, IVecI planeNormal, boolean closed)`
    `static IVecI[]` | `offset(IVecI[] pts, IDoubleI width)`
    `static IVecI[]` | `offset(IVecI[] pts, IDoubleI width, boolean closed)`
    `static IVecI[]` | `offset(IVecI[] pts, IDoubleI width, IVecI planeNormal)`
    `static IVecI[]` | `offset(IVecI[] pts, IDoubleI width, IVecI[] normals)`
    `static IVecI[]` | `offset(IVecI[] pts, IDoubleI width, IVecI[] normals, boolean closed)`
    `static IVecI[]` | `offset(IVecI[] pts, IDoubleI width, IVecI planeNormal, boolean closed)`
    `static IVecI[]` | `offset(IVecI[] pts, int ptNum, int returnNum, double width, IVecI[] normals, boolean closed)` offset points
    `static IVecI[]` | `offset(IVecI[] pts, int ptNum, int returnNum, IDoubleI width, IVecI[] normals, boolean closed)` offset points
    `static IVecI[]` | `offsetNormal(IVecI[] pts, int ptNum, boolean close)`
    `static IVec[]` | `perpendicularTo2Lines(IVecI lineDir1, IVecI linePt1, IVecI lineDir2, IVecI linePt2)` alias to closestPointsOn2Lines
    `IVec` | `perpendicularVecToLine(IVecI lineDir)` create a new vector from line to this point perpendicular to the line dir
    `IVec` | `perpendicularVecToLine(IVecI lineDir, IVecI linePt)` create a new vector from this point to the line in parpendicular direction.
    `double[]` | `projectTo2Vec(IVecI v1, IVecI v2)` project the vector to the plane defined by two input vector and decompose vector to two vector and another perpendicular vector and returns coefficient of them.
    `IVec` | `projectToLine(IVecI linePt, IVecI lineDir)` project to an infinite line.
    `IVec` | `projectToPlane(IVecI planeNormal)` project a vector onto a plane at origin
    `static void` | `projectToPlane(IVecI[] pts)` project point array to a plane.
    `static void` | `projectToPlane(IVecI[][] pts)` project point array to a plane.
    `static void` | `projectToPlane(IVecI[][] pts, IVecI planeNormal)` project point array to a plane.
    `static void` | `projectToPlane(IVecI[][] pts, IVecI planeNormal, IVecI planePt)` project point array to a plane.
    `static void` | `projectToPlane(IVecI[][] pts, IVecI projectDir, IVecI planeNormal, IVecI planePt)` project point array to a plane.
    `static void` | `projectToPlane(IVecI[] pts, IVecI planeNormal)` project point array to a plane.
    `static void` | `projectToPlane(IVecI[] pts, IVecI planeNormal, IVecI planePt)` project point array to a plane.
    `static void` | `projectToPlane(IVecI[] pts, IVecI projectDir, IVecI planeNormal, IVecI planePt)` project point array to a plane.
    `IVec` | `projectToPlane(IVecI projectDir, IVecI planeNormal)` project a vector onto a plane at origin towards a specified direction
    `IVec` | `projectToPlane(IVecI projectDir, IVecI planeNormal, IVecI planePoint)` project a point onto a plane at planePoint towards a specified direction
    `static IVecI` | `projectToPlane(IVecI pt, IVecI projectDir, IVecI planeNormal, IVecI planePt)` project point a plane.
    `IVec` | `projectToSegment(IVecI linePt1, IVecI linePt2)` project to a line segment.
    `IVec` | `projectToTriangle(IVecI pt1, IVecI pt2, IVecI pt3)`
    `double` | `projectToVec(IVecI v)` project this vector to the input vector and returns projection coefficient.
    `double` | `ratioOnSegment(IVecI linePt1, IVecI linePt2)` ratio of projected point between two points (line segment).
    `IVec` | `ref(double planeX, double planeY, double planeZ)` reflect (mirror) 3 dimensionally to the other side of the plane
    `IVec` | `ref(double centerX, double centerY, double centerZ, double planeX, double planeY, double planeZ)` reflect (mirror) 3 dimensionally to the other side of the plane at the center
    `IVec` | `ref(IVec planeDir)` reflect (mirror) 3 dimensionally to the other side of the plane
    `IVec` | `ref(IVecI planeDir)` reflect (mirror) 3 dimensionally to the other side of the plane
    `IVec` | `ref(IVecI center, IVecI planeDir)` reflect (mirror) 3 dimensionally to the other side of the plane at the center
    `IVec` | `ref(IVec center, IVec planeDir)` reflect (mirror) 3 dimensionally to the other side of the plane at the center
    `IVec` | `rev()` alias of neg()
    `IVec` | `rot(double angle)` rotation on xy-plane
    `IVec` | `rot(double axisX, double axisY, double axisZ, double angle)` rotate the vector around the axis
    `IVec` | `rot(double centerX, double centerY, double centerZ, double axisX, double axisY, double axisZ, double angle)` rotation around axis vector and center point
    `IVec` | `rot(IDoubleI angle)` rotation on xy-plane
    `IVec` | `rot(IVec axis, double angle)` rotate the vector around the axis
    `IVec` | `rot(IVecI axis, double angle)` rotation around axis vector
    `IVec` | `rot(IVecI axis, IDoubleI angle)` rotation around axis vector
    `IVec` | `rot(IVecI axis, IVecI destDir)` rotation around axis towards destination direction
    `IVec` | `rot(IVecI center, IVecI axis, double angle)` rotation around axis vector and center point
    `IVec` | `rot(IVecI center, IVecI axis, IDoubleI angle)` rotation around axis vector and center point
    `IVec` | `rot(IVecI center, IVecI axis, IVecI destPt)` rotation around axis and center towards destination point
    `IVec` | `rot(IVec axis, IVec destDir)` rotation around axis towards destination direction
    `IVec` | `rot(IVec center, IVec axis, double angle)`
    `IVec` | `rot(IVec center, IVec axis, IVec destPt)` rotation around axis and center towards destination point
    `IVec` | `rot2(double angle)` rotation on xy-plane; alias of rot(double)
    `IVec` | `rot2(double centerX, double centerY, double angle)` rotation on xy-plane
    `IVec` | `rot2(IDoubleI angle)` rotation on xy-plane; alias of rot(IDoubleI)
    `IVec` | `rot2(IVec destDir)` rotation on xy-plane towards destDir
    `IVec` | `rot2(IVec center, double angle)` rotation on xy-plane
    `IVec` | `rot2(IVecI destDir)` rotation on xy-plane towards destDir
    `IVec` | `rot2(IVecI center, double angle)` rotation on xy-plane
    `IVec` | `rot2(IVecI center, IDoubleI angle)` rotation on xy-plane
    `IVec` | `rot2(IVecI center, IVecI destPt)` rotation on xy-plane towards destPt
    `IVec` | `rot2(IVec center, IVec destPt)` rotation on xy-plane towards destPt
    `IVec` | `scale(double f)` alias of mul
    `IVec` | `scale(double centerX, double centerY, double centerZ, double f)` scale from the center
    `IVec` | `scale(IDoubleI f)` alias of mul
    `IVec` | `scale(IVec center, double f)` scale from the center
    `IVec` | `scale(IVecI center, double f)` scale from the center
    `IVec` | `scale(IVecI center, IDoubleI f)` scale from the center
    `IVec` | `scale1d(double axisX, double axisY, double axisZ, double f)` scale only in 1 direction
    `IVec` | `scale1d(double centerX, double centerY, double centerZ, double axisX, double axisY, double axisZ, double f)` scale only in 1 direction
    `IVec` | `scale1d(IVec axis, double f)` scale only in 1 direction
    `IVec` | `scale1d(IVecI axis, double f)` scale only in 1 direction
    `IVec` | `scale1d(IVecI axis, IDoubleI f)` scale only in 1 direction
    `IVec` | `scale1d(IVecI center, IVecI axis, double f)` scale only in 1 direction
    `IVec` | `scale1d(IVecI center, IVecI axis, IDoubleI f)` scale only in 1 direction
    `IVec` | `scale1d(IVec center, IVec axis, double f)` scale only in 1 direction
    `IVec` | `set(double x, double y, double z)`
    `IVec` | `set(IDoubleI x, IDoubleI y, IDoubleI z)`
    `IVec` | `set(IVec v)`
    `IVec` | `set(IVecI v)`
    `IVec` | `shear(double sxy, double syx, double syz, double szy, double szx, double sxz)` shear operation
    `IVec` | `shear(IDoubleI sxy, IDoubleI syx, IDoubleI syz, IDoubleI szy, IDoubleI szx, IDoubleI sxz)` shear operation
    `IVec` | `shear(IVecI center, double sxy, double syx, double syz, double szy, double szx, double sxz)` shear operation
    `IVec` | `shear(IVecI center, IDoubleI sxy, IDoubleI syx, IDoubleI syz, IDoubleI szy, IDoubleI szx, IDoubleI sxz)` shear operation
    `IVec` | `shearXY(double sxy, double syx)` shear operation on XY
    `IVec` | `shearXY(IDoubleI sxy, IDoubleI syx)` shear operation on XY
    `IVec` | `shearXY(IVecI center, double sxy, double syx)` shear operation on XY
    `IVec` | `shearXY(IVecI center, IDoubleI sxy, IDoubleI syx)` shear operation on XY
    `IVec` | `shearYZ(double syz, double szy)` shear operation on YZ
    `IVec` | `shearYZ(IDoubleI syz, IDoubleI szy)` shear operation on YZ
    `IVec` | `shearYZ(IVecI center, double syz, double szy)` shear operation on YZ
    `IVec` | `shearYZ(IVecI center, IDoubleI syz, IDoubleI szy)` shear operation on YZ
    `IVec` | `shearZX(double szx, double sxz)` shear operation on ZX
    `IVec` | `shearZX(IDoubleI szx, IDoubleI sxz)` shear operation on ZX
    `IVec` | `shearZX(IVecI center, double szx, double sxz)` shear operation on ZX
    `IVec` | `shearZX(IVecI center, IDoubleI szx, IDoubleI sxz)` shear operation on ZX
    `IVectorObject` | `show()` visualize a vector as an arrow.
    `IVectorObject` | `show(IServerI s)` visualize a vector as an arrow.
    `IVectorObject` | `show(IServerI s, IVecI root)` visualize a vector as an arrow.
    `IVectorObject` | `show(IVecI root)` visualize a vector as an arrow.
    `IVec` | `sub(double x, double y, double z)`
    `IVec` | `sub(IDoubleI x, IDoubleI y, IDoubleI z)`
    `IVec` | `sub(IVec v)`
    `IVec` | `sub(IVecI v)`
    `IVec` | `sum(double vx, double vy, double vz)` create a new instance of summation
    `IVec` | `sum(IVec... v)` create a new instance of summation
    `IVec` | `sum(IVec v)` create a new instance of summation
    `IVec` | `sum(IVec v2, double w2)` create a new instance of weighted summation
    `IVec` | `sum(IVec v2, double w1, double w2)` create a new instance of weighted summation
    `IVec` | `sum(IVecI... v)` create a new instance of summation
    `IVec` | `sum(IVecI v)` create a new instance of summation
    `IVec` | `sum(IVecI v2, double w2)` create a new instance of weighted summation
    `IVec` | `sum(IVecI v2, double w1, double w2)` create a new instance of weighted summation
    `IVec` | `sum(IVecI v2, IDoubleI w2)` create a new instance of weighted summation
    `IVec` | `sum(IVecI v2, IDoubleI w1, IDoubleI w2)` create a new instance of weighted summation
    `IVec2` | `to2d()`
    `IVec2` | `to2d(IVecI projectionDir)`
    `IVec2` | `to2d(IVecI xaxis, IVecI yaxis)`
    `IVec2` | `to2d(IVecI xaxis, IVecI yaxis, IVecI origin)`
    `IVec4` | `to4d()`
    `IVec4` | `to4d(double w)`
    `IVec4` | `to4d(IDoubleI w)`
    `static IVec[]` | `toIVecArray(IVecI[] array)`
    `java.lang.String` | `toString()`
    `IVec` | `transform(IMatrix3I mat)` transform with a transformation matrix
    `IVec` | `transform(IMatrix4I mat)` transform with a transformation matrix
    `IVec` | `transform(IVecI xvec, IVecI yvec, IVecI zvec)` transform with a transformation vectors
    `IVec` | `transform(IVecI xvec, IVecI yvec, IVecI zvec, IVecI translate)` transform with a transformation vectors
    `IVec` | `transform(IVec xvec, IVec yvec, IVec zvec)`
    `IVec` | `transform(IVec xvec, IVec yvec, IVec zvec, IVec translate)`
    `IVec` | `translate(double x, double y, double z)` alias of add()
    `IVec` | `translate(IDoubleI x, IDoubleI y, IDoubleI z)` alias of add()
    `IVec` | `translate(IVecI v)` alias of add()
    `IVec` | `unit()` unitize the vector
    `double` | `x()` getting x component
    `IVec` | `x(double vx)` setting x component
    `IVec` | `x(IDoubleI vx)` setting x component
    `double` | `x(ISwitchE e)` getting x component
    `IDouble` | `x(ISwitchR r)` getting x component
    `IVec` | `x(IVec2I v)` setting x component by x component of input vector
    `IVec` | `x(IVecI v)` setting x component by x component of input vector
    `double` | `y()` getting y component
    `IVec` | `y(double vy)` setting y component
    `IVec` | `y(IDoubleI vy)` setting y component
    `double` | `y(ISwitchE e)` getting y component
    `IDouble` | `y(ISwitchR r)` getting y component
    `IVec` | `y(IVec2I v)` setting y component by y component of input vector
    `IVec` | `y(IVecI v)` setting y component by y component of input vector
    `double` | `z()` getting z component
    `IVec` | `z(double vz)` setting z component
    `IVec` | `z(IDoubleI vz)` setting z component
    `double` | `z(ISwitchE e)` getting z component
    `IDouble` | `z(ISwitchR r)` getting z component
    `IVec` | `z(IVecI v)` setting z component by z component of input vector
    `IVec` | `zero()` setting all zero

    - ### Methods inherited from class igeo.IParameterObject

      `createObject, parent, parent`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### origin

          public static final IVec origin

    - #### xaxis

          public static final IVec xaxis

    - #### yaxis

          public static final IVec yaxis

    - #### zaxis

          public static final IVec zaxis

    - #### x

          public double x

    - #### y

          public double y

    - #### z

          public double z

  - ### Constructor Detail

    - #### IVec

          public IVec()

    - #### IVec

          public IVec(double x,
              double y,
              double z)

    - #### IVec

          public IVec(double x,
              double y)

    - #### IVec

          public IVec(IVec v)

    - #### IVec

          public IVec(IVecI v)

    - #### IVec

          public IVec(IDoubleI x,
              IDoubleI y,
              IDoubleI z)

    - #### IVec

          public IVec(IVec2I v)

    - #### IVec

          public IVec(IServerI s)

    - #### IVec

          public IVec(IServerI s,
              double x,
              double y,
              double z)

    - #### IVec

          public IVec(IServerI s,
              double x,
              double y)

    - #### IVec

          public IVec(IServerI s,
              IVec v)

    - #### IVec

          public IVec(IServerI s,
              IVecI v)

    - #### IVec

          public IVec(IServerI s,
              IDoubleI x,
              IDoubleI y,
              IDoubleI z)

    - #### IVec

          public IVec(IServerI s,
              IVec2I v)

  - ### Method Detail

    - #### x

          public double x()

      Description copied from interface: `IVecI`
      getting x component
      Specified by:
        `x` in interface `IVecI`

    - #### y

          public double y()

      Description copied from interface: `IVecI`
      getting y component
      Specified by:
        `y` in interface `IVecI`

    - #### z

          public double z()

      Description copied from interface: `IVecI`
      getting z component
      Specified by:
        `z` in interface `IVecI`

    - #### x

          public IVec x(double vx)

      setting x component
      Specified by:
        `x` in interface `IVecI`

    - #### y

          public IVec y(double vy)

      setting y component
      Specified by:
        `y` in interface `IVecI`

    - #### z

          public IVec z(double vz)

      setting z component
      Specified by:
        `z` in interface `IVecI`

    - #### x

          public IVec x(IDoubleI vx)

      setting x component
      Specified by:
        `x` in interface `IVecI`

    - #### y

          public IVec y(IDoubleI vy)

      setting y component
      Specified by:
        `y` in interface `IVecI`

    - #### z

          public IVec z(IDoubleI vz)

      setting z component
      Specified by:
        `z` in interface `IVecI`

    - #### x

          public IVec x(IVecI v)

      setting x component by x component of input vector
      Specified by:
        `x` in interface `IVecI`

    - #### y

          public IVec y(IVecI v)

      setting y component by y component of input vector
      Specified by:
        `y` in interface `IVecI`

    - #### z

          public IVec z(IVecI v)

      setting z component by z component of input vector
      Specified by:
        `z` in interface `IVecI`

    - #### x

          public IVec x(IVec2I v)

      setting x component by x component of input vector
      Specified by:
        `x` in interface `IVecI`

    - #### y

          public IVec y(IVec2I v)

      setting y component by y component of input vector
      Specified by:
        `y` in interface `IVecI`

    - #### x

          public double x(ISwitchE e)

      getting x component
      Specified by:
        `x` in interface `IVecI`

    - #### y

          public double y(ISwitchE e)

      getting y component
      Specified by:
        `y` in interface `IVecI`

    - #### z

          public double z(ISwitchE e)

      getting z component
      Specified by:
        `z` in interface `IVecI`

    - #### x

          public IDouble x(ISwitchR r)

      getting x component
      Specified by:
        `x` in interface `IVecI`

    - #### y

          public IDouble y(ISwitchR r)

      getting y component
      Specified by:
        `y` in interface `IVecI`

    - #### z

          public IDouble z(ISwitchR r)

      getting z component
      Specified by:
        `z` in interface `IVecI`

    - #### get

          public IVec get()

      Specified by:
        `get` in interface `IParameter`
      Specified by:
        `get` in interface `IVecI`
      Specified by:
        `get` in interface `IVecOp`

    - #### dup

          public IVec dup()

      Description copied from interface: `ITransformable`
      duplicate the instance
      Specified by:
        `dup` in interface `IArithmeticVal<IVecI,IDoubleI>`
      Specified by:
        `dup` in interface `ITransformable`
      Specified by:
        `dup` in interface `IVecI`

    - #### to2d

          public IVec2 to2d()

      Specified by:
        `to2d` in interface `IVecI`

    - #### to2d

          public IVec2 to2d(IVecI projectionDir)

      Specified by:
        `to2d` in interface `IVecI`

    - #### to2d

          public IVec2 to2d(IVecI xaxis,
                   IVecI yaxis)

      Specified by:
        `to2d` in interface `IVecI`

    - #### to2d

          public IVec2 to2d(IVecI xaxis,
                   IVecI yaxis,
                   IVecI origin)

      Specified by:
        `to2d` in interface `IVecI`

    - #### to4d

          public IVec4 to4d()

      Specified by:
        `to4d` in interface `IVecI`

    - #### to4d

          public IVec4 to4d(double w)

      Specified by:
        `to4d` in interface `IVecI`

    - #### to4d

          public IVec4 to4d(IDoubleI w)

      Specified by:
        `to4d` in interface `IVecI`

    - #### getX

          public IDouble getX()

      Specified by:
        `getX` in interface `IVecI`

    - #### getY

          public IDouble getY()

      Specified by:
        `getY` in interface `IVecI`

    - #### getZ

          public IDouble getZ()

      Specified by:
        `getZ` in interface `IVecI`

    - #### set

          public IVec set(double x,
                 double y,
                 double z)

      Specified by:
        `set` in interface `IVecI`

    - #### set

          public IVec set(IVec v)

    - #### set

          public IVec set(IVecI v)

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

    - #### set

          public IVec set(IDoubleI x,
                 IDoubleI y,
                 IDoubleI z)

      Specified by:
        `set` in interface `IVecI`

    - #### add

          public IVec add(double x,
                 double y,
                 double z)

      Specified by:
        `add` in interface `ITransformable`
      Specified by:
        `add` in interface `IVecI`

    - #### add

          public IVec add(IDoubleI x,
                 IDoubleI y,
                 IDoubleI z)

      Specified by:
        `add` in interface `ITransformable`
      Specified by:
        `add` in interface `IVecI`

    - #### add

          public IVec add(IVec v)

    - #### add

          public IVec add(IVecI v)

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

    - #### sub

          public IVec sub(double x,
                 double y,
                 double z)

      Specified by:
        `sub` in interface `ITransformable`
      Specified by:
        `sub` in interface `IVecI`

    - #### sub

          public IVec sub(IDoubleI x,
                 IDoubleI y,
                 IDoubleI z)

      Specified by:
        `sub` in interface `ITransformable`
      Specified by:
        `sub` in interface `IVecI`

    - #### sub

          public IVec sub(IVec v)

    - #### sub

          public IVec sub(IVecI v)

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

    - #### mul

          public IVec mul(double v)

      Specified by:
        `mul` in interface `ITransformable`
      Specified by:
        `mul` in interface `IVecI`

    - #### mul

          public IVec mul(IDouble v)

    - #### mul

          public IVec mul(IDoubleI v)

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

    - #### div

          public IVec div(double v)

      Specified by:
        `div` in interface `ITransformable`
      Specified by:
        `div` in interface `IVecI`

    - #### div

          public IVec div(IDouble v)

    - #### div

          public IVec div(IDoubleI v)

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

    - #### neg

          public IVec neg()

      Specified by:
        `neg` in interface `ITransformable`
      Specified by:
        `neg` in interface `IVecI`

    - #### rev

          public IVec rev()

      alias of neg()
      Specified by:
        `rev` in interface `IVecI`

    - #### flip

          public IVec flip()

      alias of neg()
      Specified by:
        `flip` in interface `ITransformable`
      Specified by:
        `flip` in interface `IVecI`

    - #### zero

          public IVec zero()

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

    - #### add

          public IVec add(IVec v,
                 double f)

      scale add

    - #### add

          public IVec add(IVecI v,
                 double f)

      scale add
      Specified by:
        `add` in interface `ITransformable`
      Specified by:
        `add` in interface `IVecI`

    - #### add

          public IVec add(IVecI v,
                 IDoubleI f)

      scale add
      Specified by:
        `add` in interface `ITransformable`
      Specified by:
        `add` in interface `IVecI`

    - #### add

          public IVec add(double f,
                 IVec v)

      scale add; alias of add(IVec,double)

    - #### add

          public IVec add(double f,
                 IVecI v)

      scale add; alias of add(IVecI,double)
      Specified by:
        `add` in interface `ITransformable`
      Specified by:
        `add` in interface `IVecI`

    - #### add

          public IVec add(IDoubleI f,
                 IVecI v)

      scale add; alias of add(IVec,IDouble)
      Specified by:
        `add` in interface `ITransformable`
      Specified by:
        `add` in interface `IVecI`

    - #### dot

          public double dot(IVec v)

      dot product in double

    - #### dot

          public double dot(IVecI v)

      dot product in double
      Specified by:
        `dot` in interface `IVecI`

    - #### dot

          public double dot(double vx,
                   double vy,
                   double vz)

      dot product in double
      Specified by:
        `dot` in interface `IVecI`

    - #### dot

          public double dot(ISwitchE e,
                   IVecI v)

      dot product in double
      Specified by:
        `dot` in interface `IVecI`

    - #### dot

          public IDouble dot(ISwitchR r,
                    IVecI v)

      dot product in IDouble
      Specified by:
        `dot` in interface `IVecI`

    - #### cross

          public IVec cross(IVec v)

      cross product. returning a new instance, not changing own content! 2011/08/03

    - #### cross

          public IVec cross(double vx,
                   double vy,
                   double vz)

      cross product.
      Specified by:
        `cross` in interface `IVecI`

    - #### cross

          public IVec cross(IVecI v)

      Description copied from interface: `IVecI`
      cross product, creating a new instance
      Specified by:
        `cross` in interface `IVecI`

    - #### icross

          public IVec icross(IVec v)

      cross product, changing its values by itself. no new instance created.

    - #### icross

          public IVec icross(double vx,
                    double vy,
                    double vz)

      cross product, changing its values by itself. no new instance created.

    - #### icross

          public IVec icross(IVecI v)

      cross product, changing its values by itself. no new instance created.

    - #### len

          public double len()

      get length of the vector
      Specified by:
        `len` in interface `IVecI`

    - #### len

          public double len(ISwitchE e)

      get length of the vector
      Specified by:
        `len` in interface `IVecI`

    - #### len

          public IDouble len(ISwitchR r)

      get length of the vector
      Specified by:
        `len` in interface `IVecI`

    - #### len2

          public double len2()

      get squared length of the vector
      Specified by:
        `len2` in interface `IVecI`

    - #### len2

          public double len2(ISwitchE e)

      get squared length of the vector
      Specified by:
        `len2` in interface `IVecI`

    - #### len2

          public IDouble len2(ISwitchR r)

      get squared length of the vector
      Specified by:
        `len2` in interface `IVecI`

    - #### len

          public IVec len(double l)

      set length of the vector
      Specified by:
        `len` in interface `IVecI`

    - #### len

          public IVec len(IDoubleI l)

      set length of the vector
      Specified by:
        `len` in interface `IVecI`

    - #### unit

          public IVec unit()

      unitize the vector
      Specified by:
        `unit` in interface `IVecI`

    - #### dist

          public double dist(IVec v)

      get distance between two vectors

    - #### dist

          public double dist(IVecI v)

      get distance between two vectors
      Specified by:
        `dist` in interface `IVecI`

    - #### dist

          public double dist(double vx,
                    double vy,
                    double vz)

      get distance between two vectors
      Specified by:
        `dist` in interface `IVecI`

    - #### dist

          public double dist(ISwitchE e,
                    IVecI v)

      get distance between two vectors
      Specified by:
        `dist` in interface `IVecI`

    - #### dist

          public IDouble dist(ISwitchR r,
                     IVecI v)

      get distance between two vectors
      Specified by:
        `dist` in interface `IVecI`

    - #### dist2

          public double dist2(IVec v)

      get squared distance between two vectors

    - #### dist2

          public double dist2(double vx,
                     double vy,
                     double vz)

      get squared distance between two vectors
      Specified by:
        `dist2` in interface `IVecI`

    - #### dist2

          public double dist2(IVecI v)

      get squared distance between two vectors
      Specified by:
        `dist2` in interface `IVecI`

    - #### dist2

          public double dist2(ISwitchE e,
                     IVecI v)

      get squared distance between two vectors
      Specified by:
        `dist2` in interface `IVecI`

    - #### dist2

          public IDouble dist2(ISwitchR r,
                      IVecI v)

      get squared distance between two vectors
      Specified by:
        `dist2` in interface `IVecI`

    - #### eq

          public boolean eq(IVec v)

      check if 2 vectors are same by distance

    - #### eq

          public boolean eq(double vx,
                   double vy,
                   double vz)

      check if 2 vectors are same by distance
      Specified by:
        `eq` in interface `IVecI`

    - #### eq

          public boolean eq(IVecI v)

      check if 2 vectors are same by distance
      Specified by:
        `eq` in interface `IVecI`

    - #### eq

          public boolean eq(ISwitchE e,
                   IVecI v)

      check if 2 vectors are same by distance
      Specified by:
        `eq` in interface `IVecI`

    - #### eq

          public IBool eq(ISwitchR r,
                 IVecI v)

      check if 2 vectors are same by distance
      Specified by:
        `eq` in interface `IVecI`

    - #### eq

          public boolean eq(IVec v,
                   double tolerance)

      check if 2 vectors are same by distance with tolerace

    - #### eq

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

      check if 2 vectors are same by distance with tolerace
      Specified by:
        `eq` in interface `IVecI`

    - #### eq

          public boolean eq(IVecI v,
                   double tolerance)

      check if 2 vectors are same by distance with tolerace
      Specified by:
        `eq` in interface `IVecI`

    - #### eq

          public boolean eq(ISwitchE e,
                   IVecI v,
                   double tolerance)

      check if 2 vectors are same by distance with tolerace
      Specified by:
        `eq` in interface `IVecI`

    - #### eq

          public IBool eq(ISwitchR r,
                 IVecI v,
                 IDoubleI tolerance)

      check if 2 vectors are same by distance with tolerace
      Specified by:
        `eq` in interface `IVecI`

    - #### eqX

          public boolean eqX(IVec v)

      check if 2 vectors are same in X

    - #### eqY

          public boolean eqY(IVec v)

      check if 2 vectors are same in Y

    - #### eqZ

          public boolean eqZ(IVec v)

      check if 2 vectors are same in Z

    - #### eqX

          public boolean eqX(double vx)

      check if 2 vectors are same in X
      Specified by:
        `eqX` in interface `IVecI`

    - #### eqY

          public boolean eqY(double vy)

      check if 2 vectors are same in Y
      Specified by:
        `eqY` in interface `IVecI`

    - #### eqZ

          public boolean eqZ(double vz)

      check if 2 vectors are same in Z
      Specified by:
        `eqZ` in interface `IVecI`

    - #### eqX

          public boolean eqX(IVecI v)

      check if 2 vectors are same in X
      Specified by:
        `eqX` in interface `IVecI`

    - #### eqY

          public boolean eqY(IVecI v)

      check if 2 vectors are same in Y
      Specified by:
        `eqY` in interface `IVecI`

    - #### eqZ

          public boolean eqZ(IVecI v)

      check if 2 vectors are same in Z
      Specified by:
        `eqZ` in interface `IVecI`

    - #### eqX

          public boolean eqX(ISwitchE e,
                    IVecI v)

      check if 2 vectors are same in X
      Specified by:
        `eqX` in interface `IVecI`

    - #### eqY

          public boolean eqY(ISwitchE e,
                    IVecI v)

      check if 2 vectors are same in Y
      Specified by:
        `eqY` in interface `IVecI`

    - #### eqZ

          public boolean eqZ(ISwitchE e,
                    IVecI v)

      check if 2 vectors are same in Z
      Specified by:
        `eqZ` in interface `IVecI`

    - #### eqX

          public IBool eqX(ISwitchR r,
                  IVecI v)

      check if 2 vectors are same in X
      Specified by:
        `eqX` in interface `IVecI`

    - #### eqY

          public IBool eqY(ISwitchR r,
                  IVecI v)

      check if 2 vectors are same in Y
      Specified by:
        `eqY` in interface `IVecI`

    - #### eqZ

          public IBool eqZ(ISwitchR r,
                  IVecI v)

      check if 2 vectors are same in Z
      Specified by:
        `eqZ` in interface `IVecI`

    - #### eqX

          public boolean eqX(IVec v,
                    double tolerance)

    - #### eqY

          public boolean eqY(IVec v,
                    double tolerance)

    - #### eqZ

          public boolean eqZ(IVec v,
                    double tolerance)

    - #### eqX

          public boolean eqX(double vx,
                    double tolerance)

      Description copied from interface: `IVecI`
      check if same in X with tolerance
      Specified by:
        `eqX` in interface `IVecI`

    - #### eqY

          public boolean eqY(double vy,
                    double tolerance)

      Description copied from interface: `IVecI`
      check if same in Y with tolerance
      Specified by:
        `eqY` in interface `IVecI`

    - #### eqZ

          public boolean eqZ(double vz,
                    double tolerance)

      Description copied from interface: `IVecI`
      check if same in Z with tolerance
      Specified by:
        `eqZ` in interface `IVecI`

    - #### eqX

          public boolean eqX(IVecI v,
                    double tolerance)

      Description copied from interface: `IVecI`
      check if same in X with tolerance
      Specified by:
        `eqX` in interface `IVecI`

    - #### eqY

          public boolean eqY(IVecI v,
                    double tolerance)

      Description copied from interface: `IVecI`
      check if same in Y with tolerance
      Specified by:
        `eqY` in interface `IVecI`

    - #### eqZ

          public boolean eqZ(IVecI v,
                    double tolerance)

      Description copied from interface: `IVecI`
      check if same in Z with tolerance
      Specified by:
        `eqZ` in interface `IVecI`

    - #### eqX

          public boolean eqX(ISwitchE e,
                    IVecI v,
                    double tolerance)

      Description copied from interface: `IVecI`
      check if same in X with tolerance
      Specified by:
        `eqX` in interface `IVecI`

    - #### eqY

          public boolean eqY(ISwitchE e,
                    IVecI v,
                    double tolerance)

      Description copied from interface: `IVecI`
      check if same in Y with tolerance
      Specified by:
        `eqY` in interface `IVecI`

    - #### eqZ

          public boolean eqZ(ISwitchE e,
                    IVecI v,
                    double tolerance)

      Description copied from interface: `IVecI`
      check if same in Z with tolerance
      Specified by:
        `eqZ` in interface `IVecI`

    - #### eqX

          public IBool eqX(ISwitchR r,
                  IVecI v,
                  IDoubleI tolerance)

      Description copied from interface: `IVecI`
      check if same in X with tolerance
      Specified by:
        `eqX` in interface `IVecI`

    - #### eqY

          public IBool eqY(ISwitchR r,
                  IVecI v,
                  IDoubleI tolerance)

      Description copied from interface: `IVecI`
      check if same in Y with tolerance
      Specified by:
        `eqY` in interface `IVecI`

    - #### eqZ

          public IBool eqZ(ISwitchR r,
                  IVecI v,
                  IDoubleI tolerance)

      Description copied from interface: `IVecI`
      check if same in Z with tolerance
      Specified by:
        `eqZ` in interface `IVecI`

    - #### angle

          public double angle(IVec v)

      angle in radian, ranging from 0 to Pi

    - #### angle

          public double angle(double vx,
                     double vy,
                     double vz)

      angle in radian, ranging from 0 to Pi
      Specified by:
        `angle` in interface `IVecI`

    - #### angle

          public double angle(IVecI v)

      angle in radian, ranging from 0 to Pi
      Specified by:
        `angle` in interface `IVecI`

    - #### angle

          public double angle(ISwitchE e,
                     IVecI v)

      angle in radian, ranging from 0 to Pi
      Specified by:
        `angle` in interface `IVecI`

    - #### angle

          public IDouble angle(ISwitchR r,
                      IVecI v)

      angle in radian, ranging from 0 to Pi
      Specified by:
        `angle` in interface `IVecI`

    - #### angle

          public double angle(IVec v,
                     IVec axis)

      angle in radian, with reference axis to decide which is negative direction, ranging from -Pi to Pi angle is not measured on the plane of axis. axis just define if it's positive angle or negative angle

    - #### angle

          public double angle(double vx,
                     double vy,
                     double vz,
                     double axisX,
                     double axisY,
                     double axisZ)

      angle in radian, with reference axis to decide which is negative direction, ranging from -Pi to Pi angle is not measured on the plane of axis. axis just define if it's positive angle or negative angle
      Specified by:
        `angle` in interface `IVecI`
      Returns:
        angle between two vector from -Pi to Pi. Sign follows right-handed screw rule along axis

    - #### angle

          public double angle(IVecI v,
                     IVecI axis)

      angle in radian, with reference axis to decide which is negative direction, ranging from -Pi to Pi angle is not measured on the plane of axis. axis just define if it's positive angle or negative angle
      Specified by:
        `angle` in interface `IVecI`
        `axis` - axis to determin sign of angle following right-handed screw rule.
      Returns:
        angle between two vector from -Pi to Pi. Sign follows right-handed screw rule along axis

    - #### angle

          public double angle(ISwitchE e,
                     IVecI v,
                     IVecI axis)

      angle in radian, with reference axis to decide which is negative direction, ranging from -Pi to Pi angle is not measured on the plane of axis. axis just define if it's positive angle or negative angle
      Specified by:
        `angle` in interface `IVecI`
        `axis` - axis to determin sign of angle following right-handed screw rule.
      Returns:
        angle between two vector from -Pi to Pi. Sign follows right-handed screw rule along axis

    - #### angle

          public IDouble angle(ISwitchR r,
                      IVecI v,
                      IVecI axis)

      angle in radian, with reference axis to decide which is negative direction, ranging from -Pi to Pi angle is not measured on the plane of axis. axis just define if it's positive angle or negative angle
      Specified by:
        `angle` in interface `IVecI`
        `axis` - axis to determin sign of angle following right-handed screw rule.
      Returns:
        angle between two vector from -Pi to Pi. Sign follows right-handed screw rule along axis

    - #### angleOnPlane

          public double angleOnPlane(IVec v,
                            IVec planeDir)

      angle of two vector on a specified plane

    - #### angleOnPlane

          public double angleOnPlane(IVecI v,
                            IVecI planeDir)

      angle of two vector on a specified plane

    - #### angleOnPlane

          public double angleOnPlane(ISwitchE e,
                            IVecI v,
                            IVecI planeDir)

      angle of two vector on a specified plane

    - #### angleOnPlane

          public IDouble angleOnPlane(ISwitchR r,
                             IVecI v,
                             IVecI planeDir)

      angle of two vector on a specified plane

    - #### angleOnPlane

          public double angleOnPlane(IVec pt,
                            IVec planeCenter,
                            IVec planeDir)

      angle of two points on a specified plane around the center

    - #### angleOnPlane

          public double angleOnPlane(IVecI pt,
                            IVecI planeCenter,
                            IVecI planeDir)

      angle of two points on a specified plane around the center

    - #### angleOnPlane

          public double angleOnPlane(ISwitchE e,
                            IVecI pt,
                            IVecI planeCenter,
                            IVecI planeDir)

      angle of two points on a specified plane around the center

    - #### angleOnPlane

          public IDouble angleOnPlane(ISwitchR r,
                             IVecI pt,
                             IVecI planeCenter,
                             IVecI planeDir)

      angle of two points on a specified plane around the center

    - #### rot

          public IVec rot(IVec axis,
                 double angle)

      rotate the vector around the axis

    - #### rot

          public IVec rot(double axisX,
                 double axisY,
                 double axisZ,
                 double angle)

      rotate the vector around the axis
      Specified by:
        `rot` in interface `IVecI`

    - #### rot

          public IVec rot(IVecI axis,
                 double angle)

      Description copied from interface: `IVecI`
      rotation around axis vector
      Specified by:
        `rot` in interface `ITransformable`
      Specified by:
        `rot` in interface `IVecI`

    - #### rot

          public IVec rot(IVecI axis,
                 IDoubleI angle)

      Description copied from interface: `IVecI`
      rotation around axis vector
      Specified by:
        `rot` in interface `ITransformable`
      Specified by:
        `rot` in interface `IVecI`

    - #### rot

          public IVec rot(double angle)

      rotation on xy-plane
      Specified by:
        `rot` in interface `ITransformable`
      Specified by:
        `rot` in interface `IVecI`

    - #### rot

          public IVec rot(IDoubleI angle)

      rotation on xy-plane
      Specified by:
        `rot` in interface `ITransformable`
      Specified by:
        `rot` in interface `IVecI`

    - #### rot

          public IVec rot(IVec center,
                 IVec axis,
                 double angle)

    - #### rot

          public IVec rot(double centerX,
                 double centerY,
                 double centerZ,
                 double axisX,
                 double axisY,
                 double axisZ,
                 double angle)

      Description copied from interface: `IVecI`
      rotation around axis vector and center point
      Specified by:
        `rot` in interface `IVecI`

    - #### rot

          public IVec rot(IVecI center,
                 IVecI axis,
                 double angle)

      Description copied from interface: `IVecI`
      rotation around axis vector and center point
      Specified by:
        `rot` in interface `ITransformable`
      Specified by:
        `rot` in interface `IVecI`

    - #### rot

          public IVec rot(IVecI center,
                 IVecI axis,
                 IDoubleI angle)

      Description copied from interface: `IVecI`
      rotation around axis vector and center point
      Specified by:
        `rot` in interface `ITransformable`
      Specified by:
        `rot` in interface `IVecI`

    - #### rot

          public IVec rot(IVec axis,
                 IVec destDir)

      rotation around axis towards destination direction

    - #### rot

          public IVec rot(IVecI axis,
                 IVecI destDir)

      rotation around axis towards destination direction
      Specified by:
        `rot` in interface `ITransformable`
      Specified by:
        `rot` in interface `IVecI`

    - #### rot

          public IVec rot(IVec center,
                 IVec axis,
                 IVec destPt)

      rotation around axis and center towards destination point

    - #### rot

          public IVec rot(IVecI center,
                 IVecI axis,
                 IVecI destPt)

      rotation around axis and center towards destination point
      Specified by:
        `rot` in interface `ITransformable`
      Specified by:
        `rot` in interface `IVecI`

    - #### rot2

          public IVec rot2(double angle)

      rotation on xy-plane; alias of rot(double)
      Specified by:
        `rot2` in interface `ITransformable`
      Specified by:
        `rot2` in interface `IVecI`

    - #### rot2

          public IVec rot2(IDoubleI angle)

      rotation on xy-plane; alias of rot(IDoubleI)
      Specified by:
        `rot2` in interface `ITransformable`
      Specified by:
        `rot2` in interface `IVecI`

    - #### rot2

          public IVec rot2(IVec center,
                  double angle)

      rotation on xy-plane

    - #### rot2

          public IVec rot2(double centerX,
                  double centerY,
                  double angle)

      rotation on xy-plane
      Specified by:
        `rot2` in interface `IVecI`

    - #### rot2

          public IVec rot2(IVecI center,
                  double angle)

      rotation on xy-plane
      Specified by:
        `rot2` in interface `ITransformable`
      Specified by:
        `rot2` in interface `IVecI`

    - #### rot2

          public IVec rot2(IVecI center,
                  IDoubleI angle)

      rotation on xy-plane
      Specified by:
        `rot2` in interface `ITransformable`
      Specified by:
        `rot2` in interface `IVecI`

    - #### rot2

          public IVec rot2(IVec destDir)

      rotation on xy-plane towards destDir

    - #### rot2

          public IVec rot2(IVecI destDir)

      rotation on xy-plane towards destDir
      Specified by:
        `rot2` in interface `ITransformable`
      Specified by:
        `rot2` in interface `IVecI`

    - #### rot2

          public IVec rot2(IVec center,
                  IVec destPt)

      rotation on xy-plane towards destPt

    - #### rot2

          public IVec rot2(IVecI center,
                  IVecI destPt)

      rotation on xy-plane towards destPt
      Specified by:
        `rot2` in interface `ITransformable`
      Specified by:
        `rot2` in interface `IVecI`

    - #### scale

          public IVec scale(IDoubleI f)

      alias of mul
      Specified by:
        `scale` in interface `ITransformable`
      Specified by:
        `scale` in interface `IVecI`

    - #### scale

          public IVec scale(double f)

      Description copied from interface: `IVecI`
      alias of mul
      Specified by:
        `scale` in interface `ITransformable`
      Specified by:
        `scale` in interface `IVecI`

    - #### scale

          public IVec scale(IVec center,
                   double f)

      scale from the center

    - #### scale

          public IVec scale(double centerX,
                   double centerY,
                   double centerZ,
                   double f)

      scale from the center
      Specified by:
        `scale` in interface `IVecI`

    - #### scale

          public IVec scale(IVecI center,
                   double f)

      scale from the center
      Specified by:
        `scale` in interface `ITransformable`
      Specified by:
        `scale` in interface `IVecI`

    - #### scale

          public IVec scale(IVecI center,
                   IDoubleI f)

      scale from the center
      Specified by:
        `scale` in interface `ITransformable`
      Specified by:
        `scale` in interface `IVecI`

    - #### scale1d

          public IVec scale1d(IVec axis,
                     double f)

      scale only in 1 direction

    - #### scale1d

          public IVec scale1d(double axisX,
                     double axisY,
                     double axisZ,
                     double f)

      scale only in 1 direction
      Specified by:
        `scale1d` in interface `IVecI`

    - #### scale1d

          public IVec scale1d(IVecI axis,
                     double f)

      scale only in 1 direction
      Specified by:
        `scale1d` in interface `ITransformable`
      Specified by:
        `scale1d` in interface `IVecI`

    - #### scale1d

          public IVec scale1d(IVecI axis,
                     IDoubleI f)

      scale only in 1 direction
      Specified by:
        `scale1d` in interface `ITransformable`
      Specified by:
        `scale1d` in interface `IVecI`

    - #### scale1d

          public IVec scale1d(IVec center,
                     IVec axis,
                     double f)

      scale only in 1 direction

    - #### scale1d

          public IVec scale1d(IVecI center,
                     IVecI axis,
                     double f)

      scale only in 1 direction
      Specified by:
        `scale1d` in interface `ITransformable`
      Specified by:
        `scale1d` in interface `IVecI`

    - #### scale1d

          public IVec scale1d(double centerX,
                     double centerY,
                     double centerZ,
                     double axisX,
                     double axisY,
                     double axisZ,
                     double f)

      scale only in 1 direction
      Specified by:
        `scale1d` in interface `IVecI`

    - #### scale1d

          public IVec scale1d(IVecI center,
                     IVecI axis,
                     IDoubleI f)

      scale only in 1 direction
      Specified by:
        `scale1d` in interface `ITransformable`
      Specified by:
        `scale1d` in interface `IVecI`

    - #### ref

          public IVec ref(IVec planeDir)

      reflect (mirror) 3 dimensionally to the other side of the plane

    - #### ref

          public IVec ref(double planeX,
                 double planeY,
                 double planeZ)

      reflect (mirror) 3 dimensionally to the other side of the plane
      Specified by:
        `ref` in interface `IVecI`

    - #### ref

          public IVec ref(IVecI planeDir)

      reflect (mirror) 3 dimensionally to the other side of the plane
      Specified by:
        `ref` in interface `ITransformable`
      Specified by:
        `ref` in interface `IVecI`

    - #### ref

          public IVec ref(IVec center,
                 IVec planeDir)

      reflect (mirror) 3 dimensionally to the other side of the plane at the center

    - #### ref

          public IVec ref(double centerX,
                 double centerY,
                 double centerZ,
                 double planeX,
                 double planeY,
                 double planeZ)

      reflect (mirror) 3 dimensionally to the other side of the plane at the center
      Specified by:
        `ref` in interface `IVecI`

    - #### ref

          public IVec ref(IVecI center,
                 IVecI planeDir)

      reflect (mirror) 3 dimensionally to the other side of the plane at the center
      Specified by:
        `ref` in interface `ITransformable`
      Specified by:
        `ref` in interface `IVecI`

    - #### mirror

          public IVec mirror(IVec planeDir)

      alias of ref

    - #### mirror

          public IVec mirror(double planeX,
                    double planeY,
                    double planeZ)

      alias of ref
      Specified by:
        `mirror` in interface `IVecI`

    - #### mirror

          public IVec mirror(IVecI planeDir)

      alias of ref
      Specified by:
        `mirror` in interface `ITransformable`
      Specified by:
        `mirror` in interface `IVecI`

    - #### mirror

          public IVec mirror(IVec center,
                    IVec planeDir)

      alias of ref

    - #### mirror

          public IVec mirror(double centerX,
                    double centerY,
                    double centerZ,
                    double planeX,
                    double planeY,
                    double planeZ)

      alias of ref
      Specified by:
        `mirror` in interface `IVecI`

    - #### mirror

          public IVec mirror(IVecI center,
                    IVecI planeDir)

      alias of ref
      Specified by:
        `mirror` in interface `ITransformable`
      Specified by:
        `mirror` in interface `IVecI`

    - #### shear

          public IVec shear(double sxy,
                   double syx,
                   double syz,
                   double szy,
                   double szx,
                   double sxz)

      Description copied from interface: `IVecI`
      shear operation
      Specified by:
        `shear` in interface `ITransformable`
      Specified by:
        `shear` in interface `IVecI`

    - #### shear

          public IVec shear(IDoubleI sxy,
                   IDoubleI syx,
                   IDoubleI syz,
                   IDoubleI szy,
                   IDoubleI szx,
                   IDoubleI sxz)

      Description copied from interface: `IVecI`
      shear operation
      Specified by:
        `shear` in interface `ITransformable`
      Specified by:
        `shear` in interface `IVecI`

    - #### shear

          public IVec shear(IVecI center,
                   double sxy,
                   double syx,
                   double syz,
                   double szy,
                   double szx,
                   double sxz)

      Description copied from interface: `IVecI`
      shear operation
      Specified by:
        `shear` in interface `ITransformable`
      Specified by:
        `shear` in interface `IVecI`

    - #### shear

          public IVec shear(IVecI center,
                   IDoubleI sxy,
                   IDoubleI syx,
                   IDoubleI syz,
                   IDoubleI szy,
                   IDoubleI szx,
                   IDoubleI sxz)

      Description copied from interface: `IVecI`
      shear operation
      Specified by:
        `shear` in interface `ITransformable`
      Specified by:
        `shear` in interface `IVecI`

    - #### shearXY

          public IVec shearXY(double sxy,
                     double syx)

      Description copied from interface: `IVecI`
      shear operation on XY
      Specified by:
        `shearXY` in interface `ITransformable`
      Specified by:
        `shearXY` in interface `IVecI`

    - #### shearXY

          public IVec shearXY(IDoubleI sxy,
                     IDoubleI syx)

      Description copied from interface: `IVecI`
      shear operation on XY
      Specified by:
        `shearXY` in interface `ITransformable`
      Specified by:
        `shearXY` in interface `IVecI`

    - #### shearXY

          public IVec shearXY(IVecI center,
                     double sxy,
                     double syx)

      Description copied from interface: `IVecI`
      shear operation on XY
      Specified by:
        `shearXY` in interface `ITransformable`
      Specified by:
        `shearXY` in interface `IVecI`

    - #### shearXY

          public IVec shearXY(IVecI center,
                     IDoubleI sxy,
                     IDoubleI syx)

      Description copied from interface: `IVecI`
      shear operation on XY
      Specified by:
        `shearXY` in interface `ITransformable`
      Specified by:
        `shearXY` in interface `IVecI`

    - #### shearYZ

          public IVec shearYZ(double syz,
                     double szy)

      Description copied from interface: `IVecI`
      shear operation on YZ
      Specified by:
        `shearYZ` in interface `ITransformable`
      Specified by:
        `shearYZ` in interface `IVecI`

    - #### shearYZ

          public IVec shearYZ(IDoubleI syz,
                     IDoubleI szy)

      Description copied from interface: `IVecI`
      shear operation on YZ
      Specified by:
        `shearYZ` in interface `ITransformable`
      Specified by:
        `shearYZ` in interface `IVecI`

    - #### shearYZ

          public IVec shearYZ(IVecI center,
                     double syz,
                     double szy)

      Description copied from interface: `IVecI`
      shear operation on YZ
      Specified by:
        `shearYZ` in interface `ITransformable`
      Specified by:
        `shearYZ` in interface `IVecI`

    - #### shearYZ

          public IVec shearYZ(IVecI center,
                     IDoubleI syz,
                     IDoubleI szy)

      Description copied from interface: `IVecI`
      shear operation on YZ
      Specified by:
        `shearYZ` in interface `ITransformable`
      Specified by:
        `shearYZ` in interface `IVecI`

    - #### shearZX

          public IVec shearZX(double szx,
                     double sxz)

      Description copied from interface: `IVecI`
      shear operation on ZX
      Specified by:
        `shearZX` in interface `ITransformable`
      Specified by:
        `shearZX` in interface `IVecI`

    - #### shearZX

          public IVec shearZX(IDoubleI szx,
                     IDoubleI sxz)

      Description copied from interface: `IVecI`
      shear operation on ZX
      Specified by:
        `shearZX` in interface `ITransformable`
      Specified by:
        `shearZX` in interface `IVecI`

    - #### shearZX

          public IVec shearZX(IVecI center,
                     double szx,
                     double sxz)

      Description copied from interface: `IVecI`
      shear operation on ZX
      Specified by:
        `shearZX` in interface `ITransformable`
      Specified by:
        `shearZX` in interface `IVecI`

    - #### shearZX

          public IVec shearZX(IVecI center,
                     IDoubleI szx,
                     IDoubleI sxz)

      Description copied from interface: `IVecI`
      shear operation on ZX
      Specified by:
        `shearZX` in interface `ITransformable`
      Specified by:
        `shearZX` in interface `IVecI`

    - #### translate

          public IVec translate(double x,
                       double y,
                       double z)

      Description copied from interface: `IVecI`
      alias of add()
      Specified by:
        `translate` in interface `ITransformable`
      Specified by:
        `translate` in interface `IVecI`

    - #### translate

          public IVec translate(IDoubleI x,
                       IDoubleI y,
                       IDoubleI z)

      Description copied from interface: `IVecI`
      alias of add()
      Specified by:
        `translate` in interface `ITransformable`
      Specified by:
        `translate` in interface `IVecI`

    - #### translate

          public IVec translate(IVecI v)

      Description copied from interface: `IVecI`
      alias of add()
      Specified by:
        `translate` in interface `ITransformable`
      Specified by:
        `translate` in interface `IVecI`

    - #### transform

          public IVec transform(IMatrix3I mat)

      Description copied from interface: `IVecI`
      transform with a transformation matrix
      Specified by:
        `transform` in interface `ITransformable`
      Specified by:
        `transform` in interface `IVecI`

    - #### transform

          public IVec transform(IMatrix4I mat)

      Description copied from interface: `IVecI`
      transform with a transformation matrix
      Specified by:
        `transform` in interface `ITransformable`
      Specified by:
        `transform` in interface `IVecI`

    - #### transform

          public IVec transform(IVec xvec,
                       IVec yvec,
                       IVec zvec)

    - #### transform

          public IVec transform(IVecI xvec,
                       IVecI yvec,
                       IVecI zvec)

      Description copied from interface: `IVecI`
      transform with a transformation vectors
      Specified by:
        `transform` in interface `ITransformable`
      Specified by:
        `transform` in interface `IVecI`

    - #### transform

          public IVec transform(IVec xvec,
                       IVec yvec,
                       IVec zvec,
                       IVec translate)

    - #### transform

          public IVec transform(IVecI xvec,
                       IVecI yvec,
                       IVecI zvec,
                       IVecI translate)

      Description copied from interface: `IVecI`
      transform with a transformation vectors
      Specified by:
        `transform` in interface `ITransformable`
      Specified by:
        `transform` in interface `IVecI`

    - #### mv

          public IVec mv(double vx,
                double vy,
                double vz)

      mv() is alias of add()
      Specified by:
        `mv` in interface `ITransformable`
      Specified by:
        `mv` in interface `IVecI`

    - #### mv

          public IVec mv(IDoubleI vx,
                IDoubleI vy,
                IDoubleI vz)

      Description copied from interface: `IVecI`
      mv() is alias of add()
      Specified by:
        `mv` in interface `ITransformable`
      Specified by:
        `mv` in interface `IVecI`

    - #### mv

          public IVec mv(IVecI v)

      Description copied from interface: `IVecI`
      mv() is alias of add()
      Specified by:
        `mv` in interface `ITransformable`
      Specified by:
        `mv` in interface `IVecI`

    - #### cp

          public IVec cp()

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

    - #### cp

          public IVec cp(IVec v)

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

    - #### cp

          public IVec cp(double vx,
                double vy,
                double vz)

      Description copied from interface: `IVecI`
      cp() is alias of dup().add()
      Specified by:
        `cp` in interface `ITransformable`
      Specified by:
        `cp` in interface `IVecI`

    - #### cp

          public IVec cp(IDoubleI vx,
                IDoubleI vy,
                IDoubleI vz)

      Description copied from interface: `IVecI`
      cp() is alias of dup().add()
      Specified by:
        `cp` in interface `ITransformable`
      Specified by:
        `cp` in interface `IVecI`

    - #### cp

          public IVec cp(IVecI v)

      Description copied from interface: `IVecI`
      cp() is alias of dup().add()
      Specified by:
        `cp` in interface `ITransformable`
      Specified by:
        `cp` in interface `IVecI`

    - #### dif

          public IVec dif(IVec v)

      create a new instance of difference

    - #### dif

          public IVec dif(double vx,
                 double vy,
                 double vz)

      create a new instance of difference
      Specified by:
        `dif` in interface `IVecI`

    - #### dif

          public IVec dif(IVecI v)

      create a new instance of difference
      Specified by:
        `dif` in interface `IVecI`

    - #### diff

          public IVec diff(IVec v)

      create a new instance of difference

    - #### diff

          public IVec diff(double vx,
                  double vy,
                  double vz)

      create a new instance of difference
      Specified by:
        `diff` in interface `IVecI`

    - #### diff

          public IVec diff(IVecI v)

      create a new instance of difference
      Specified by:
        `diff` in interface `IVecI`

    - #### mid

          public IVec mid(IVec v)

      create a new instance of midpoint

    - #### mid

          public IVec mid(double vx,
                 double vy,
                 double vz)

      create a new instance of midpoint
      Specified by:
        `mid` in interface `IVecI`

    - #### mid

          public IVec mid(IVecI v)

      create a new instance of midpoint
      Specified by:
        `mid` in interface `IVecI`

    - #### sum

          public IVec sum(IVec v)

      create a new instance of summation

    - #### sum

          public IVec sum(double vx,
                 double vy,
                 double vz)

      create a new instance of summation
      Specified by:
        `sum` in interface `IVecI`

    - #### sum

          public IVec sum(IVecI v)

      create a new instance of summation
      Specified by:
        `sum` in interface `IVecI`

    - #### sum

          public IVec sum(IVec... v)

      create a new instance of summation

    - #### sum

          public IVec sum(IVecI... v)

      create a new instance of summation
      Specified by:
        `sum` in interface `IVecI`

    - #### bisect

          public IVec bisect(IVec v)

      create a new instance of bisector

    - #### bisect

          public IVec bisect(double vx,
                    double vy,
                    double vz)

      create a new instance of bisector
      Specified by:
        `bisect` in interface `IVecI`

    - #### bisect

          public IVec bisect(IVecI v)

      create a new instance of bisector
      Specified by:
        `bisect` in interface `IVecI`

    - #### sum

          public IVec sum(IVec v2,
                 double w1,
                 double w2)

      create a new instance of weighted summation

    - #### sum

          public IVec sum(IVec v2,
                 double w2)

      create a new instance of weighted summation

    - #### sum

          public IVec sum(IVecI v2,
                 double w1,
                 double w2)

      create a new instance of weighted summation
      Specified by:
        `sum` in interface `IVecI`

    - #### sum

          public IVec sum(IVecI v2,
                 double w2)

      create a new instance of weighted summation
      Specified by:
        `sum` in interface `IVecI`

    - #### sum

          public IVec sum(IVecI v2,
                 IDoubleI w1,
                 IDoubleI w2)

      create a new instance of weighted summation
      Specified by:
        `sum` in interface `IVecI`

    - #### sum

          public IVec sum(IVecI v2,
                 IDoubleI w2)

      create a new instance of weighted summation
      Specified by:
        `sum` in interface `IVecI`

    - #### isValid

          public boolean isValid()

      checking x, y, and z is valid number (not Infinite, nor NaN).
      Specified by:
        `isValid` in interface `IVecI`

    - #### toString

          public java.lang.String toString()

      Overrides:
        `toString` in class `java.lang.Object`

    - #### isParallel

          public boolean isParallel(IVecI v)

    - #### isParallel

          public boolean isParallel(IVecI v,
                           double angleTolerance)

    - #### isPerpendicular

          public boolean isPerpendicular(IVecI v)

    - #### isPerpendicular

          public boolean isPerpendicular(IVecI v,
                                double angleTolerance)

    - #### isStraight

          public boolean isStraight(IVecI v1,
                           IVecI v2)

    - #### isStraight

          public boolean isStraight(IVecI v1,
                           IVecI v2,
                           double tolerance)

    - #### isOnLine

          public boolean isOnLine(IVecI v1,
                         IVecI v2)

      determine if it's on & inside the line

    - #### isOnLine

          public boolean isOnLine(IVecI v1,
                         IVecI v2,
                         double tolerance)

      determine if it's on & inside the line

    - #### isOnSegment

          public boolean isOnSegment(IVecI v1,
                            IVecI v2)

      alias of isOnLine

    - #### isOnSegment

          public boolean isOnSegment(IVecI v1,
                            IVecI v2,
                            double tolerance)

      alias of isOnLine

    - #### isInside2d

          public boolean isInside2d(IVecI[] pts)

    - #### isInside2d

          public boolean isInside2d(IVec2I[] pts)

    - #### isInside2d

          public boolean isInside2d(IVecI projectionDir,
                           IVecI[] pts)

    - #### isInside2d

          public boolean isInside2d(IVecI projectionDir,
                           IVec2I[] pts)

    - #### isInsideTriangle

          public boolean isInsideTriangle(IVecI pt1,
                                 IVecI pt2,
                                 IVecI pt3)

    - #### nml

          public IVec nml(IVecI v)

      alias of cross. (not unitized)
      Specified by:
        `nml` in interface `IVecI`

    - #### nml

          public IVec nml(IVec v)

      alias of cross. (not unitized)

    - #### nml

          public IVec nml(double vx,
                 double vy,
                 double vz)

      alias of cross. (not unitized)
      Specified by:
        `nml` in interface `IVecI`

    - #### nml

          public IVec nml(IVecI pt1,
                 IVecI pt2)

      create normal vector from 3 points of self, pt1 and pt2 (not unitized)
      Specified by:
        `nml` in interface `IVecI`

    - #### nml

          public IVec nml(IVec pt1,
                 IVec pt2)

      create normal vector from 3 points of self, pt1 and pt2 (not unitized)

    - #### nml

          public IVec nml(double vx1,
                 double vy1,
                 double vz1,
                 double vx2,
                 double vy2,
                 double vz2)

      create normal vector from 3 points of self, pt1 and pt2 (not unitized)
      Specified by:
        `nml` in interface `IVecI`

    - #### nml

          public static IVecI nml(IVecI pt1,
                  IVecI pt2,
                  IVecI pt3)

      create normal vector from 3 points

    - #### nml

          public static IVec nml(IVec pt1,
                 IVec pt2,
                 IVec pt3)

      create normal vector from 3 points

    - #### nml

          public static IVec nml(double vx1,
                 double vy1,
                 double vz1,
                 double vx2,
                 double vy2,
                 double vz2,
                 double vx3,
                 double vy3,
                 double vz3)

      create normal vector from 3 points

    - #### getNormal

          public static IVecI getNormal(IVecI pt1,
                        IVecI pt2,
                        IVecI pt3)

      create normal vector from 3 points

    - #### getNormal

          public static IVec getNormal(IVec pt1,
                       IVec pt2,
                       IVec pt3)

      create normal vector from 3 points

    - #### getNormal

          public static IVec getNormal(double vx1,
                       double vy1,
                       double vz1,
                       double vx2,
                       double vy2,
                       double vz2,
                       double vx3,
                       double vy3,
                       double vz3)

    - #### getNormal

          public IVecI getNormal(IVecI pt2,
                        IVecI pt3)

      alias of nml

    - #### getNormal

          public IVec getNormal(IVec pt2,
                       IVec pt3)

      alias of nml

    - #### projectToPlane

          public IVec projectToPlane(IVecI planeNormal)

      project a vector onto a plane at origin

    - #### projectToPlane

          public IVec projectToPlane(IVecI projectDir,
                            IVecI planeNormal)

      project a vector onto a plane at origin towards a specified direction

    - #### projectToPlane

          public IVec projectToPlane(IVecI projectDir,
                            IVecI planeNormal,
                            IVecI planePoint)

      project a point onto a plane at planePoint towards a specified direction

    - #### projectToTriangle

          public IVec projectToTriangle(IVecI pt1,
                               IVecI pt2,
                               IVecI pt3)

    - #### projectToLine

          public IVec projectToLine(IVecI linePt,
                           IVecI lineDir)

      project to an infinite line. the vector changes itself.

    - #### projectToSegment

          public IVec projectToSegment(IVecI linePt1,
                              IVecI linePt2)

      project to a line segment. this project itself

    - #### projectTo2Vec

          public double[] projectTo2Vec(IVecI v1,
                               IVecI v2)

      project the vector to the plane defined by two input vector and decompose vector to two vector and another perpendicular vector and returns coefficient of them. relationship of them is like below. this = return[0] * v1 + return[1] * v2 + return[2] * v1.cross(v2);
      Returns:
        array of three double number, first is coefficient of uvec, second is of vvec and third is of uvec.cross(vvec)

    - #### projectToVec

          public double projectToVec(IVecI v)

      project this vector to the input vector and returns projection coefficient.
      Parameters:
        `v` - a vector for this vector to project on.

    - #### decompose

          public IVec[] decompose(IVecI uaxis,
                         IVecI vaxis)

      decompose the vector to two input vectors and another perpendicular vector of those two and returns three decomposed vector. the vector itself doensn't change. this = return[0] + return[1] + return[2];
      Returns:
        array of three decomposed vectors

    - #### distToLine

          public double distToLine(IVecI lineDir,
                          IVecI linePt)

      distance to an infinite line

    - #### distToLine

          public double distToLine(IVecI lineDir)

      distance to a line dir

    - #### distToSegment

          public double distToSegment(IVecI linePt1,
                             IVecI linePt2)

      distance to a line segment

    - #### ratioOnSegment

          public double ratioOnSegment(IVecI linePt1,
                              IVecI linePt2)

      ratio of projected point between two points (line segment). 0.0 is at linePt1, 1.0 is at linePt2.

    - #### distToPlane

          public double distToPlane(IVecI planeDir,
                           IVecI planePt)

      distance to a plane

    - #### distToTriangle

          public double distToTriangle(IVecI pt1,
                              IVecI pt2,
                              IVecI pt3)

      distance to a triangle

    - #### perpendicularVecToLine

          public IVec perpendicularVecToLine(IVecI lineDir,
                                    IVecI linePt)

      create a new vector from this point to the line in parpendicular direction.

    - #### perpendicularVecToLine

          public IVec perpendicularVecToLine(IVecI lineDir)

      create a new vector from line to this point perpendicular to the line dir

    - #### isOnPlane

          public boolean isOnPlane(IVecI planePt1,
                          IVecI planePt2,
                          IVecI planePt3)

    - #### isOnPlane

          public boolean isOnPlane(IVecI planeDir,
                          IVecI planePt)

    - #### isOnPlane

          public boolean isOnPlane(IVecI planePt1,
                          IVecI planePt2,
                          IVecI planePt3,
                          double tolerance)

    - #### isOnPlane

          public boolean isOnPlane(IVecI planeDir,
                          IVecI planePt,
                          double tolerance)

    - #### isOnTriangle

          public boolean isOnTriangle(IVecI pt1,
                             IVecI pt2,
                             IVecI pt3,
                             double tolerance)

    - #### isOnTriangle

          public boolean isOnTriangle(IVecI pt1,
                             IVecI pt2,
                             IVecI pt3)

    - #### show

          public IVectorObject show(IVecI root)

      visualize a vector as an arrow.
      Parameters:
        `root` - A root position of the arrow.

    - #### show

          public IVectorObject show()

      visualize a vector as an arrow. The root position of the arrow is the origin.

    - #### show

          public IVectorObject show(IServerI s,
                           IVecI root)

      visualize a vector as an arrow.
      Parameters:
        `s` - A server to store the object.
        `root` - A root position of the arrow.

    - #### show

          public IVectorObject show(IServerI s)

      visualize a vector as an arrow. The root position of the arrow is the origin.
      Parameters:
        `s` - A server to store the object.

    - #### isStraight

          public static boolean isStraight(IVecI[] pts,
                           double tolerance)

      static methods

    - #### isStraight

          public static boolean isStraight(IVecI[] pts)

    - #### isFlat

          public static boolean isFlat(IVecI pt1,
                       IVecI pt2,
                       IVecI pt3,
                       IVecI pt4)

    - #### isFlat

          public static boolean isFlat(IVecI pt1,
                       IVecI pt2,
                       IVecI pt3,
                       IVecI pt4,
                       double tolerance)

    - #### isFlat

          public static boolean isFlat(IVecI[] pts)

    - #### isFlat

          public static boolean isFlat(IVecI[] pts,
                       double tolerance)

    - #### isArrayEqual

          public static boolean isArrayEqual(IVec[] pts1,
                             IVec[] pts2,
                             boolean cyclic,
                             boolean reverse)

    - #### isArrayEqual

          public static boolean isArrayEqual(IVec[] pts1,
                             IVec[] pts2,
                             boolean cyclic,
                             boolean reverse,
                             double tolerance)

    - #### averageNormal

          public static IVec averageNormal(IVecI[] pts)

      average normal of point array in form of a polyline. It return IVec, not IVecI. (Should it return IVecI?)

    - #### averageNormal

          public static IVec averageNormal(IVecI[][] pts)

      average normal of point array in form of a matrix. It return IVec, not IVecI. (Should it return IVecI?)

    - #### center

          public static IVec center(IVecI... v)

      calculating centetr of multiple points

    - #### circumcenter

          public static IVec circumcenter(IVecI pt1,
                          IVecI pt2,
                          IVecI pt3)

      calculate circumcenter; center of circumcircle

    - #### area

          public static double area(IVecI pt1,
                    IVecI pt2,
                    IVecI pt3)

      area of a triangle

    - #### toIVecArray

          public static IVec[] toIVecArray(IVecI[] array)

    - #### offsetNormal

          public static IVecI[] offsetNormal(IVecI[] pts,
                             int ptNum,
                             boolean close)

    - #### offset

          public static IVecI[] offset(IVecI[] pts,
                       double width)

      offset without normal vector. normal vectors are automatically generated

    - #### offset

          public static IVecI[] offset(IVecI[] pts,
                       IDoubleI width)

    - #### offset

          public static IVecI[] offset(IVecI[] pts,
                       double width,
                       boolean closed)

    - #### offset

          public static IVecI[] offset(IVecI[] pts,
                       IDoubleI width,
                       boolean closed)

    - #### offset

          public static IVec[] offset(IVec[] pts,
                      double width)

    - #### offset

          public static IVec[] offset(IVec[] pts,
                      double width,
                      boolean closed)

    - #### offset

          public static IVecI[] offset(IVecI[] pts,
                       double width,
                       IVecI planeNormal)

      offset with one normal vector

    - #### offset

          public static IVecI[] offset(IVecI[] pts,
                       IDoubleI width,
                       IVecI planeNormal)

    - #### offset

          public static IVecI[] offset(IVecI[] pts,
                       double width,
                       IVecI planeNormal,
                       boolean closed)

    - #### offset

          public static IVecI[] offset(IVecI[] pts,
                       IDoubleI width,
                       IVecI planeNormal,
                       boolean closed)

    - #### offset

          public static IVec[] offset(IVec[] pts,
                      double width,
                      IVecI planeNormal)

    - #### offset

          public static IVec[] offset(IVec[] pts,
                      double width,
                      IVecI planeNormal,
                      boolean closed)

    - #### offset

          public static IVecI[] offset(IVecI[] pts,
                       double width,
                       IVecI[] normals)

      offset with array of normal vectors

    - #### offset

          public static IVecI[] offset(IVecI[] pts,
                       IDoubleI width,
                       IVecI[] normals)

    - #### offset

          public static IVecI[] offset(IVecI[] pts,
                       double width,
                       IVecI[] normals,
                       boolean closed)

    - #### offset

          public static IVecI[] offset(IVecI[] pts,
                       IDoubleI width,
                       IVecI[] normals,
                       boolean closed)

    - #### offset

          public static IVec[] offset(IVec[] pts,
                      double width,
                      IVecI[] normals)

    - #### offset

          public static IVec[] offset(IVec[] pts,
                      double width,
                      IVecI[] normals,
                      boolean closed)

    - #### offset

          public static IVecI[] offset(IVecI[] pts,
                       int ptNum,
                       int returnNum,
                       double width,
                       IVecI[] normals,
                       boolean closed)

      offset points
      Parameters:
        `pts` - points to be offset
        `ptNum` - point num to be offset (equals to pts.length or less)
        `returnNum` - return array length (cannot be less than ptNum; when more than ptNum, the remaining is filled with null )
        `width` - offset width
        `normals` - normal vector at each point (number can be less than ptNum; if so, the last member is used for the rest). if normals is null, it's automatically set by offsetNormal method
        `closed` - closed polyline or not

    - #### offset

          public static IVecI[] offset(IVecI[] pts,
                       int ptNum,
                       int returnNum,
                       IDoubleI width,
                       IVecI[] normals,
                       boolean closed)

      offset points
      Parameters:
        `pts` - points to be offset
        `ptNum` - point num to be offset (equals to pts.length or less)
        `returnNum` - return array length (cannot be less than ptNum; when more than ptNum, the remaining is filled with null )
        `width` - offset width
        `normals` - normal vector at each point (number can be less than ptNum; if so, the last member is used for the rest)
        `closed` - closed polyline or not

    - #### projectToPlane

          public static IVecI projectToPlane(IVecI pt,
                             IVecI projectDir,
                             IVecI planeNormal,
                             IVecI planePt)

      project point a plane. input IVecI point pt is changed. doing same thing with projectToPlane(IVecI,IVecI,IVecI) but this is for IVecI.

    - #### projectToPlane

          public static void projectToPlane(IVecI[] pts,
                            IVecI projectDir,
                            IVecI planeNormal,
                            IVecI planePt)

      project point array to a plane. input points are changed.

    - #### projectToPlane

          public static void projectToPlane(IVecI[][] pts,
                            IVecI projectDir,
                            IVecI planeNormal,
                            IVecI planePt)

      project point array to a plane. input points are changed.

    - #### projectToPlane

          public static void projectToPlane(IVecI[] pts,
                            IVecI planeNormal,
                            IVecI planePt)

      project point array to a plane. input points are changed.

    - #### projectToPlane

          public static void projectToPlane(IVecI[][] pts,
                            IVecI planeNormal,
                            IVecI planePt)

      project point array to a plane. input points are changed.

    - #### projectToPlane

          public static void projectToPlane(IVecI[] pts,
                            IVecI planeNormal)

      project point array to a plane. input points are changed. projection plane point is the first element in the array. (should it be center?)

    - #### projectToPlane

          public static void projectToPlane(IVecI[][] pts,
                            IVecI planeNormal)

      project point array to a plane. input points are changed. projection plane point is the first element in the array. (should it be center?)

    - #### projectToPlane

          public static void projectToPlane(IVecI[] pts)

      project point array to a plane. input points are changed. projection plane normal is average normal of pts. projection plane point is the first element in the array. (should it be center?)

    - #### projectToPlane

          public static void projectToPlane(IVecI[][] pts)

      project point array to a plane. input points are changed. projection plane normal is average normal of pts. projection plane point is the first element in the array. (should it be center?)

    - #### intersect

          public static IVec intersect(IVecI line1Pt1,
                       IVecI line1Pt2,
                       IVecI line2Pt1,
                       IVecI line2Pt2)

      intersection of two infinite lines.

    - #### intersect

          public static IVec intersect(IVecI line1Pt1,
                       IVecI line1Pt2,
                       IVecI line2Pt1,
                       IVecI line2Pt2,
                       double tolerance)

      intersection of two infinite lines.

    - #### intersect

          public static IVec intersect(IVec line1Pt1,
                       IVec line1Pt2,
                       IVec line2Pt1,
                       IVec line2Pt2)

      intersection of two infinite lines.

    - #### intersect

          public static IVec intersect(IVec line1Pt1,
                       IVec line1Pt2,
                       IVec line2Pt1,
                       IVec line2Pt2,
                       double tolerance)

      intersection of two infinite lines. If two lines are skew and 4 points are not on the same plane and the gap is less than tolerance, intersection points is projected onto the line. If the gap is too big or lines are parallel, it returns null. If tolerance is negative, it accepts any gap of two lines and returns a close point on one line.
      Returns:
        intersection point or null if it cannot find intersection

    - #### intersectInfiniteLines

          public static IVec intersectInfiniteLines(IVecI line1Pt1,
                                    IVecI line1Pt2,
                                    IVecI line2Pt1,
                                    IVecI line2Pt2)

      intersect infinite lines; alias of intersect()

    - #### intersectInfiniteLines

          public static IVec intersectInfiniteLines(IVecI line1Pt1,
                                    IVecI line1Pt2,
                                    IVecI line2Pt1,
                                    IVecI line2Pt2,
                                    double tolerance)

      intersect infinite lines; alias of intersect()

    - #### intersectInfiniteLines

          public static IVec intersectInfiniteLines(IVec line1Pt1,
                                    IVec line1Pt2,
                                    IVec line2Pt1,
                                    IVec line2Pt2)

      intersect infinite lines; alias of intersect()

    - #### intersectInfiniteLines

          public static IVec intersectInfiniteLines(IVec line1Pt1,
                                    IVec line1Pt2,
                                    IVec line2Pt1,
                                    IVec line2Pt2,
                                    double tolerance)

      intersect infinite lines; alias of intersect()

    - #### intersectInfiniteLine

          public static IVec intersectInfiniteLine(IVecI line1Pt1,
                                   IVecI line1Pt2,
                                   IVecI line2Pt1,
                                   IVecI line2Pt2)

      intersect infinite lines; alias of intersect()

    - #### intersectInfiniteLine

          public static IVec intersectInfiniteLine(IVecI line1Pt1,
                                   IVecI line1Pt2,
                                   IVecI line2Pt1,
                                   IVecI line2Pt2,
                                   double tolerance)

      intersect infinite lines; alias of intersect()

    - #### intersectInfiniteLine

          public static IVec intersectInfiniteLine(IVec line1Pt1,
                                   IVec line1Pt2,
                                   IVec line2Pt1,
                                   IVec line2Pt2)

      intersect infinite lines; alias of intersect()

    - #### intersectInfiniteLine

          public static IVec intersectInfiniteLine(IVec line1Pt1,
                                   IVec line1Pt2,
                                   IVec line2Pt1,
                                   IVec line2Pt2,
                                   double tolerance)

      intersect infinite lines; alias of intersect()

    - #### intersectInfLines

          public static IVec intersectInfLines(IVecI line1Pt1,
                               IVecI line1Pt2,
                               IVecI line2Pt1,
                               IVecI line2Pt2)

      intersect infinite lines; alias of intersect()

    - #### intersectInfLines

          public static IVec intersectInfLines(IVecI line1Pt1,
                               IVecI line1Pt2,
                               IVecI line2Pt1,
                               IVecI line2Pt2,
                               double tolerance)

      intersect infinite lines; alias of intersect()

    - #### intersectInfLines

          public static IVec intersectInfLines(IVec line1Pt1,
                               IVec line1Pt2,
                               IVec line2Pt1,
                               IVec line2Pt2)

      intersect infinite lines; alias of intersect()

    - #### intersectInfLines

          public static IVec intersectInfLines(IVec line1Pt1,
                               IVec line1Pt2,
                               IVec line2Pt1,
                               IVec line2Pt2,
                               double tolerance)

      intersect infinite lines; alias of intersect()

    - #### intersectInfLine

          public static IVec intersectInfLine(IVecI line1Pt1,
                              IVecI line1Pt2,
                              IVecI line2Pt1,
                              IVecI line2Pt2)

      intersect infinite lines; alias of intersect()

    - #### intersectInfLine

          public static IVec intersectInfLine(IVecI line1Pt1,
                              IVecI line1Pt2,
                              IVecI line2Pt1,
                              IVecI line2Pt2,
                              double tolerance)

      intersect infinite lines; alias of intersect()

    - #### intersectInfLine

          public static IVec intersectInfLine(IVec line1Pt1,
                              IVec line1Pt2,
                              IVec line2Pt1,
                              IVec line2Pt2)

      intersect infinite lines; alias of intersect()

    - #### intersectInfLine

          public static IVec intersectInfLine(IVec line1Pt1,
                              IVec line1Pt2,
                              IVec line2Pt1,
                              IVec line2Pt2,
                              double tolerance)

      intersect infinite lines; alias of intersect()

    - #### intersectSegment

          public static IVec intersectSegment(IVecI line1Pt1,
                              IVecI line1Pt2,
                              IVecI line2Pt1,
                              IVecI line2Pt2)

    - #### intersectSegment

          public static IVec intersectSegment(IVecI line1Pt1,
                              IVecI line1Pt2,
                              IVecI line2Pt1,
                              IVecI line2Pt2,
                              double tolerance)

    - #### intersectSegment

          public static IVec intersectSegment(IVec line1Pt1,
                              IVec line1Pt2,
                              IVec line2Pt1,
                              IVec line2Pt2)

      intersection of line segments. If intersection point is not on line, it returns null.

    - #### intersectSegment

          public static IVec intersectSegment(IVec line1Pt1,
                              IVec line1Pt2,
                              IVec line2Pt1,
                              IVec line2Pt2,
                              double tolerance)

      intersection of line segments. If intersection point is not on line, it returns null.
      Returns:
        intersection point or null if it cannot find intersection

    - #### intersectSegments

          public static IVec intersectSegments(IVecI line1Pt1,
                               IVecI line1Pt2,
                               IVecI line2Pt1,
                               IVecI line2Pt2)

      intersection of line segments; alias of intersectSegment

    - #### intersectSegments

          public static IVec intersectSegments(IVecI line1Pt1,
                               IVecI line1Pt2,
                               IVecI line2Pt1,
                               IVecI line2Pt2,
                               double tolerance)

    - #### intersectSegments

          public static IVec intersectSegments(IVec line1Pt1,
                               IVec line1Pt2,
                               IVec line2Pt1,
                               IVec line2Pt2)

    - #### intersectSegments

          public static IVec intersectSegments(IVec line1Pt1,
                               IVec line1Pt2,
                               IVec line2Pt1,
                               IVec line2Pt2,
                               double tolerance)

    - #### intersectSeg

          public static IVec intersectSeg(IVecI line1Pt1,
                          IVecI line1Pt2,
                          IVecI line2Pt1,
                          IVecI line2Pt2)

      intersection of line segments; alias of intersectSegment

    - #### intersectSeg

          public static IVec intersectSeg(IVecI line1Pt1,
                          IVecI line1Pt2,
                          IVecI line2Pt1,
                          IVecI line2Pt2,
                          double tolerance)

    - #### intersectSeg

          public static IVec intersectSeg(IVec line1Pt1,
                          IVec line1Pt2,
                          IVec line2Pt1,
                          IVec line2Pt2)

    - #### intersectSeg

          public static IVec intersectSeg(IVec line1Pt1,
                          IVec line1Pt2,
                          IVec line2Pt1,
                          IVec line2Pt2,
                          double tolerance)

    - #### intersectLines

          public static IVec intersectLines(IVecI line1Pt1,
                            IVecI line1Pt2,
                            IVecI line2Pt1,
                            IVecI line2Pt2)

      intersection of line segments; alias of intersectSegment

    - #### intersectLines

          public static IVec intersectLines(IVecI line1Pt1,
                            IVecI line1Pt2,
                            IVecI line2Pt1,
                            IVecI line2Pt2,
                            double tolerance)

    - #### intersectLines

          public static IVec intersectLines(IVec line1Pt1,
                            IVec line1Pt2,
                            IVec line2Pt1,
                            IVec line2Pt2)

    - #### intersectLines

          public static IVec intersectLines(IVec line1Pt1,
                            IVec line1Pt2,
                            IVec line2Pt1,
                            IVec line2Pt2,
                            double tolerance)

    - #### intersectLine

          public static IVec intersectLine(IVecI line1Pt1,
                           IVecI line1Pt2,
                           IVecI line2Pt1,
                           IVecI line2Pt2)

      intersection of line segments; alias of intersectSegment

    - #### intersectLine

          public static IVec intersectLine(IVecI line1Pt1,
                           IVecI line1Pt2,
                           IVecI line2Pt1,
                           IVecI line2Pt2,
                           double tolerance)

    - #### intersectLine

          public static IVec intersectLine(IVec line1Pt1,
                           IVec line1Pt2,
                           IVec line2Pt1,
                           IVec line2Pt2)

    - #### intersectLine

          public static IVec intersectLine(IVec line1Pt1,
                           IVec line1Pt2,
                           IVec line2Pt1,
                           IVec line2Pt2,
                           double tolerance)

    - #### intersectPlane

          public static IVec[] intersectPlane(IVec plane1Dir,
                              IVec plane1Pt,
                              IVec plane2Dir,
                              IVec plane2Pt)

      intersection of two planes.
      Returns:
        array of two IVec. first is intersection line direction. second is a point on intersection line. or null if no intersection found

    - #### intersectPlane

          public static IVec intersectPlane(IVec plane1Dir,
                            IVec plane2Dir)

      intersection of two planes at the origin.
      Returns:
        intersection direction vector. when it's parallel, return value would be zero vector.

    - #### intersectPlane

          public static IVec[] intersectPlane(IVec plane1Pt1,
                              IVec plane1Pt2,
                              IVec plane1Pt3,
                              IVec plane2Pt1,
                              IVec plane2Pt2,
                              IVec plane2Pt3)

      intersection of two planes
      Returns:
        array of two IVec. first is intersection line direction. second is a point on intersection line. or null if no intersection found

    - #### intersectPlaneAndLine

          public static IVec intersectPlaneAndLine(IVec planeDir,
                                   IVec planePt,
                                   IVec lineDir,
                                   IVec linePt)

      intersection of one plane and one infinite line

    - #### intersectPlaneAndLine

          public static IVec intersectPlaneAndLine(IVec planeDir,
                                   IVec lineDir,
                                   IVec linePt)

      intersection of one plane at the origin and one infinite line

    - #### intersectPlaneAndLine

          public static IVec intersectPlaneAndLine(IVec planePt1,
                                   IVec planePt2,
                                   IVec planePt3,
                                   IVec linePt1,
                                   IVec linePt2)

      intersection of one plane and one infinite line

    - #### intersectPlaneAndSegment

          public static IVec intersectPlaneAndSegment(IVec planeDir,
                                      IVec planePt,
                                      IVec linePt1,
                                      IVec linePt2)

      intersection of one plane and one line segment. if the segment is not intersecting with the plane, it returns null.

    - #### intersectPlaneAndSegment

          public static IVec intersectPlaneAndSegment(IVec planeDir,
                                      IVec linePt1,
                                      IVec linePt2)

      intersection of one plane at the origin and one line segment. if the segment is not intersecting with the plane, it returns null.

    - #### bisectPlane

          public static IVec[] bisectPlane(IVec planeDir1,
                           IVec planePt1,
                           IVec planeDir2,
                           IVec planePt2)

      bisector plane of two planes
      Returns:
        an array of two IVec; the first is plane normal direction, the second is plane point.

    - #### intersectPlaneAndSphere

          public static IVec[] intersectPlaneAndSphere(IVec planeDir,
                                       IVec planePt,
                                       IVec sphereCenter,
                                       double sphereRadius)

      intersection circle of a plane and a sphere.
      Returns:
        IVec[0] : normal or an intersection circle and the length of the vector is radius IVec[1] : center point of the intersection circle

    - #### intersectCircleAndSphere

          public static IVec[] intersectCircleAndSphere(IVec circleNormal,
                                        IVec circleCenter,
                                        double circleRadius,
                                        IVec sphereCenter,
                                        double sphereRadius)

    - #### intersectSphere

          public static IVec[] intersectSphere(IVec sphereCenter1,
                               double radius1,
                               IVec sphereCenter2,
                               double radius2)

      intersection circle of two spheres
      Returns:
        null if no intersection or IVec[0] : normal vector of an intersection circle whose length is radius IVec[1] : center of the intersection circle

    - #### intersectLineAndSphere

          public static IVec[] intersectLineAndSphere(IVec lineDir,
                                      IVec linePt,
                                      IVec center,
                                      double radius)

      intersection between an infinite line and a sphere.
      Returns:
        null if no intersection or one point when the line intersects only at one point or two points if it intersects at two points.

    - #### intersectCircle

          public static IVec[] intersectCircle(IVec circleNormal1,
                               IVec circleCenter1,
                               double radius1,
                               IVec circleNormal2,
                               IVec circleCenter2,
                               double radius2)

    - #### angle

          public static double angle(IVecI pt1,
                     IVecI pt2,
                     IVecI pt3)

      measure angle of polyline of pt1, pt2 and pt3 at pt2, which is equivalent to measure angle between vectors from pt2 to pt1 and pt2 to pt3.

    - #### closestPointsOn2Lines

          public static IVec[] closestPointsOn2Lines(IVecI lineDir1,
                                     IVecI linePt1,
                                     IVecI lineDir2,
                                     IVecI linePt2)

      find two closest points on two infinete lines in a skew relationship, which makes a segment perpendicular to two lines

    - #### perpendicularTo2Lines

          public static IVec[] perpendicularTo2Lines(IVecI lineDir1,
                                     IVecI linePt1,
                                     IVecI lineDir2,
                                     IVecI linePt2)

      alias to closestPointsOn2Lines

    - #### distBetween2Lines

          public static double distBetween2Lines(IVecI lineDir1,
                                 IVecI linePt1,
                                 IVecI lineDir2,
                                 IVecI linePt2)