# Line

Class representing a line

## Constructor

#### new Line(pt, norm)

Line may be constructed by point and normal vector or by two points that a line passes through

Source:
  - classes/line.js, line 15

##### Parameters:

Name | Type | Description
--- | --- | ---
`pt` | `Point` | point that a line passes through
`norm` | `Vector` | `Point` | normal vector to a line or second point a line passes through

### Classes

Line

### Members

#### box

Returns infinite box

Source:
  - classes/line.js, line 119

#### end

Line has no end point

Source:
  - classes/line.js, line 107

#### length

Return positive infinity number as length

Source:
  - classes/line.js, line 113

#### middle

Middle point is undefined

Source:
  - classes/line.js, line 132

#### norm :Vector

Normal vector to a line
Vector is normalized (length == 1)
Direction of the vector is chosen to satisfy inequality norm * p >= 0

Source:
  - classes/line.js, line 33

##### Type:

- `Vector`

#### pt :Point

Point a line passes through

Source:
  - classes/line.js, line 26

##### Type:

- `Point`

#### slope

Slope of the line - angle in radians between line and axe x from 0 to 2PI

Source:
  - classes/line.js, line 138

#### standard

Get coefficients [A,B,C] of a standard line equation in the form Ax + By = C

Source:
  - classes/line.js, line 148

### Methods

#### clone() → {Line}

Return new cloned instance of line

Source:
  - classes/line.js, line 93

##### Returns:

Type:
  `Line`

#### contains(pt) → {boolean}

Returns true if point belongs to line

Source:
  - classes/line.js, line 179

##### Parameters:

Name | Type | Description
--- | --- | ---
`pt` | `Point` | Query point

##### Returns:

Type:
  `boolean`

#### coord(pt) → {number}

Return coordinate of the point that lays on the line in the transformed coordinate system where center is the projection of the point(0,0) to the line and axe y is collinear to the normal vector.
This method assumes that point lays on the line and does not check it

Source:
  - classes/line.js, line 196

##### Parameters:

Name | Type | Description
--- | --- | ---
`pt` | `Point` | point on line

##### Returns:

Type:
  `number`

#### distanceTo(shape) → {Number|Segment}

Calculate distance and shortest segment from line to shape and returns array [distance, shortest_segment]

Source:
  - classes/line.js, line 242

##### Parameters:

Name | Type | Description
--- | --- | ---
`shape` | `Shape` | Shape of the one of the types Point, Circle, Segment, Arc, Polygon

##### Returns:

- Type:
    `Number`
- Type:
    `Segment`

#### incidentTo(other_line) → {boolean}

Returns true if incident to other line

Source:
  - classes/line.js, line 170

##### Parameters:

Name | Type | Description
--- | --- | ---
`other_line` | `Line` | line to check

##### Returns:

Type:
  `boolean`

#### intersect(shape) → {Array.<Point>}

Returns array of intersection points

Source:
  - classes/line.js, line 205

##### Parameters:

Name | Type | Description
--- | --- | ---
`shape` | `Shape` | shape to intersect with

##### Returns:

Type:
  `Array.<Point>`

#### parallelTo(other_line) → {boolean}

Return true if parallel or incident to other line

Source:
  - classes/line.js, line 161

##### Parameters:

Name | Type | Description
--- | --- | ---
`other_line` | `Line` | line to check

##### Returns:

Type:
  `boolean`

#### sortPoints(pts) → {Array.<Point>}

Sort given array of points that lay on line with respect to coordinate on a line The method assumes that points lay on the line and does not check this

Source:
  - classes/line.js, line 295

##### Parameters:

Name | Type | Description
--- | --- | ---
`pts` | `Array.<Point>` | array of points

##### Returns:

Type:
  `Array.<Point>`

new array sorted

#### split(pt) → {Array.<Shape>}

Split line with array of points and return array of shapes Assumed that all points lay on the line

Source:
  - classes/line.js, line 277

##### Parameters:

Name | Type | Description
--- | --- | ---
`pt` | `Array.<Point>` |

##### Returns:

Type:
  `Array.<Shape>`

#### svg(box, attrs)

Return string to draw svg segment representing line inside given box

Source:
  - classes/line.js, line 321

##### Parameters:

Name | Type | Description
--- | --- | ---
`box` | `Box` | Box representing drawing area
`attrs` | `Object` | an object with attributes of svg circle element

#### toJSON() → {Object}

This method returns an object that defines how data will be serialized when called JSON.stringify() method

Source:
  - classes/line.js, line 312

##### Returns:

Type:
  `Object`