# Trait libreda_db::prelude::traits::WindingNumber

```
pub trait WindingNumber<T> {
// Required method
fn winding_number(&self, point: Point<T>) -> isize;
// Provided methods
fn contains_point_non_oriented(&self, point: Point<T>) -> bool { ... }
fn contains_point(&self, point: Point<T>) -> bool { ... }
}
```

## Expand description

Compute the winding number of a geometrical object around a point. The winding number is used to check if a point is contained in a shape.

## Required Methods§

#### fn winding_number(&self, point: Point<T>) -> isize

#### fn winding_number(&self, point: Point<T>) -> isize

Calculate the winding number of the polygon around this point.

TODO: Define how point on edges and vertices is handled.

## Provided Methods§

#### fn contains_point_non_oriented(&self, point: Point<T>) -> bool

#### fn contains_point_non_oriented(&self, point: Point<T>) -> bool

Check if `point`

is inside the polygon, i.e. the polygons winds around the point
a non-zero number of times.

For points on edges the following convention is used: Points on left or bottom edges are inside, points on right or top edges outside.

#### fn contains_point(&self, point: Point<T>) -> bool

#### fn contains_point(&self, point: Point<T>) -> bool

Check if `point`

is inside the polygon, i.e. the polygon winds around the point
an odd number of times.

For points on edges the following convention is used: Points on left or bottom edges are inside, points on right or top edges outside.