pub struct Coordinate(pub f64, pub f64);
Expand description
This structure conceptually represents a point or a vector on the 2-dimensional Cartesian plane.
It may be vary on the context which represents which.
Tuple Fields§
§0: f64
x-component of the Cartesian coordinates.
1: f64
y-component of the Cartesian coordinates.
Implementations§
Source§impl Coordinate
impl Coordinate
Sourcepub fn new(x: f64, y: f64) -> Self
pub fn new(x: f64, y: f64) -> Self
Creates and returns a Coordinate w.r.t. the given argument.
§Argument
x
: x-component of theCoordinate
.y
: y-component of theCoordinate
.
§Example
let c1 = geo_buffer::Coordinate::new(3., 4.);
assert_eq!(c1, (3., 4.).into());
Sourcepub fn get_val(&self) -> (f64, f64)
pub fn get_val(&self) -> (f64, f64)
Returns a tuple wihch has values of each component.
§Example
let c1 = geo_buffer::Coordinate::new(3., 4.);
let t1 = c1.get_val();
assert_eq!(t1, (3., 4.));
Sourcepub fn inner_product(&self, rhs: &Self) -> f64
pub fn inner_product(&self, rhs: &Self) -> f64
Returns a value of inner product (i.e. dot product) of the Cartesian coordinates of two vectors.
§Argument
self
: The Cartesian coordinates of the first vector, a.rhs
: The Cartesian coordinates of the second vector, b.
§Return
a · b
§Example
let c1 = geo_buffer::Coordinate::new(1., 2.);
let c2 = geo_buffer::Coordinate::new(3., 4.);
let ip = c1.inner_product(&c2);
assert_eq!(ip, 11.);
§Notes
- This operation is linear.
- This operation is commutative.
Sourcepub fn outer_product(&self, rhs: &Self) -> f64
pub fn outer_product(&self, rhs: &Self) -> f64
Returns a value of the magnitude of cross product of the Cartesian coordinates of two vectors.
§Argument
self
: The Cartesian coordinates of the first vector, a.rhs
: The Cartesian coordinates of the second vector, b.
§Return
a × b
§Example
let c1 = geo_buffer::Coordinate::new(1., 2.);
let c2 = geo_buffer::Coordinate::new(3., 4.);
let op = c1.outer_product(&c2);
assert_eq!(op, -2.);
§Notes
- This operation is linear.
- This operation is not commutative. (More precisely, it is anti-commutative.)
- The sign of cross product indicates the orientation of a and b. If a lies before b in the counter-clockwise (CCW for short) ordering, the sign of the result will be positive. If a lies after b in CCW ordering, the sign will be negative. The result will be zero if two vectors are colinear. (I.e. lay on the same line.)
Sourcepub fn norm(&self) -> f64
pub fn norm(&self) -> f64
Returns the Euclidean norm (i.e. magnitude, or L2 norm) of the given vector.
§Example
let c1 = geo_buffer::Coordinate::new(3., 4.);
assert_eq!(c1.norm(), 5.);
Sourcepub fn dist_coord(&self, rhs: &Coordinate) -> f64
pub fn dist_coord(&self, rhs: &Coordinate) -> f64
Returns the distance between two Cartesian coordinates.
§Example
let c1 = geo_buffer::Coordinate::new(3., 4.);
let c2 = geo_buffer::Coordinate::new(7., 7.);
assert_eq!(c1.dist_coord(&c2), 5.);
Sourcepub fn dist_ray(&self, rhs: &Ray) -> f64
pub fn dist_ray(&self, rhs: &Ray) -> f64
Returns the distance from self
to the given ray.
Note that this function considers the given ray as a open-ended line. That is, the foot of perpendicular may lay on the extended line of the given ray.
§Example
use geo_buffer::{Coordinate, Ray};
let r1 = Ray::new((0., 3.).into(), (4., 0.).into());
let c1 = Coordinate::new(0., 0.);
assert_eq!(c1.dist_ray(&r1), 2.4);
Sourcepub fn eq(&self, rhs: &Self) -> bool
pub fn eq(&self, rhs: &Self) -> bool
Checks whether the given two Cartesian coordinates are the same (by the equality test with a small epsilon).
§Result
true
if the given coordinates are the same.false
otherwise.
§Example
let c1 = geo_buffer::Coordinate::new(0.1, 0.2);
let c2 = geo_buffer::Coordinate::new(0.2, 0.3);
let c3 = geo_buffer::Coordinate::new(0.3, 0.5);
let c4 = c1 + c2;
assert!(c3.eq(&c4));
§Example (this example panics)
let c1 = geo_buffer::Coordinate::new(0.1, 0.2);
let c2 = geo_buffer::Coordinate::new(0.2, 0.3);
let c3 = geo_buffer::Coordinate::new(0.3, 0.5);
let c4 = c1 + c2;
assert_eq!(c3, c4); // should panic since 0.1 + 0.2 != 0.3 due to floating point errors
Trait Implementations§
Source§impl Add for Coordinate
impl Add for Coordinate
Source§impl Clone for Coordinate
impl Clone for Coordinate
Source§fn clone(&self) -> Coordinate
fn clone(&self) -> Coordinate
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more