Axial

Struct Axial 

Source
pub struct Axial {
    pub q: i32,
    pub r: i32,
}
Expand description

Axial coordinates use the same system as cube coordinates, but only store two of the coordinate values. This is possible since, for cube coordinate (x, y, z), the third value can always be calculated when the other two are known due to the constraint x + y + z == 0.

Fields§

§q: i32§r: i32

Implementations§

Source§

impl Axial

Source

pub const ORIGIN: Axial

Axial coordinate origin of (0, 0).

Source

pub fn from_coords(q: i32, r: i32) -> Self

For two unsigned 32-bit integers x and y, the corresponding axial coordinate is (x, y).

§Examples
use chickenwire::coordinate::axial::Axial;

assert_eq!(Axial::from((1, 2)), Axial::from_coords(1, 2));
Source

pub fn neighbors(self) -> Vec<Self>

[ docs missing ]

Source

pub fn diagonals(self) -> Vec<Self>

[ docs missing ]

Source

pub fn dist(self, other: Self) -> i32

Determines the distance between two axial coordinates.

§Examples
use chickenwire::coordinate::axial::Axial;

let origin = Axial::ORIGIN;
let coord_1 = Axial { q: 1, r: -3 };
let coord_2 = Axial { q: -8, r: 2 };

assert_eq!(origin.dist(coord_1), 3);
assert_eq!(coord_1.dist(origin), 3);
assert_eq!(coord_1.dist(coord_1), 0);
assert_eq!(coord_2.dist(coord_1), 9);

Trait Implementations§

Source§

impl Add for Axial

Adds two Axial coordinates in the same manner as vectors.

§Examples

use chickenwire::coordinate::axial::Axial;

let coord_1 = Axial::from_coords(1, -3);
let coord_2 = Axial::from_coords(-5, 12);

assert_eq!(coord_1 + coord_2, Axial::from_coords(-4, 9));
assert_eq!(coord_2 + coord_1, Axial::from_coords(-4, 9));
Source§

type Output = Axial

The resulting type after applying the + operator.
Source§

fn add(self, other: Self) -> Self

Performs the + operation. Read more
Source§

impl Clone for Axial

Source§

fn clone(&self) -> Axial

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Axial

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Axial

Source§

fn default() -> Axial

Returns the “default value” for a type. Read more
Source§

impl Div<i32> for Axial

Divides an Axial coordinate by an i32 scalar, like a vector. Values are truncated (i.e. rounded toward zero).

§Panics

Panics when trying to divide by zero.

§Examples

use chickenwire::coordinate::axial::Axial;

let coord = Axial::from_coords(12, -36);

assert_eq!(coord / -1, Axial::from_coords(-12, 36));
assert_eq!(coord / 2, Axial::from_coords(6, -18));
assert_eq!(coord / 3, Axial::from_coords(4, -12));
Source§

type Output = Axial

The resulting type after applying the / operator.
Source§

fn div(self, n: i32) -> Self

Performs the / operation. Read more
Source§

impl From<(i32, i32)> for Axial

Creates an Axial from an (i32, i32).

§Examples

use chickenwire::coordinate::axial::Axial;

assert_eq!(
    Axial::from((1, 2)),
    Axial { q: 1, r: 2 }
);
Source§

fn from((q, r): (i32, i32)) -> Self

Converts to this type from the input type.
Source§

impl From<Axial> for CoordSys

Creates a CoordSys::Axial from an Axial.

Source§

fn from(_: Axial) -> Self

Converts to this type from the input type.
Source§

impl From<Axial> for Cube

For axial coordinate (q, r), cube coordinate (x, y, z) is calculated by solving for y based upon the constraint x + y + z == 0, where x == q and z == r.

§Examples

use chickenwire::coordinate::axial::Axial;
use chickenwire::coordinate::cube::Cube;

let axial = Axial::from_coords(1, 2);

assert_eq!(Cube::from(Axial::ORIGIN), Cube::ORIGIN);
assert_eq!(Cube::from(axial), Cube::force_from_coords(1, -3, 2));
Source§

fn from(coord: Axial) -> Self

Converts to this type from the input type.
Source§

impl From<Axial> for MultiCoord

Creates a MultiCoord from an Axial.

Source§

fn from(coord: Axial) -> Self

Converts to this type from the input type.
Source§

impl From<Cube> for Axial

Creates an Axial from a Cube.

§Examples

use chickenwire::coordinate::axial::Axial;
use chickenwire::coordinate::cube::Cube;

let cube = Cube::force_from_coords(1, 2, -3);

assert_eq!(
    Axial::from(cube),
    Axial { q: 1, r: -3 }
);
assert_eq!(
    Axial::from(Cube::ORIGIN),
    Axial::ORIGIN
);
Source§

fn from(coord: Cube) -> Self

Converts to this type from the input type.
Source§

impl From<MultiCoord> for Axial

Creates an Axial from a MultiCoord.

Conversion from both axial and cube MultiCoords is supported.

§Panics

Panics when parsing a double or offset MultiCoord.

Source§

fn from(coord: MultiCoord) -> Self

Converts to this type from the input type.
Source§

impl Hash for Axial

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Mul<Axial> for i32

Source§

type Output = Axial

The resulting type after applying the * operator.
Source§

fn mul(self, coord: Axial) -> Axial

Performs the * operation. Read more
Source§

impl Mul<i32> for Axial

Multiplies an Axial coordinate by an i32 scalar, like a vector.

§Examples

use chickenwire::coordinate::axial::Axial;

let coord = Axial::from_coords(1, -3);

assert_eq!(-1 * coord, Axial::from_coords(-1, 3));
assert_eq!(0 * coord, Axial::ORIGIN);
assert_eq!(coord * 2, Axial::from_coords(2, -6));
Source§

type Output = Axial

The resulting type after applying the * operator.
Source§

fn mul(self, n: i32) -> Self

Performs the * operation. Read more
Source§

impl Ord for Axial

Source§

fn cmp(&self, other: &Axial) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for Axial

Source§

fn eq(&self, other: &Axial) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for Axial

Source§

fn partial_cmp(&self, other: &Axial) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Sub for Axial

Subtracts two Axial coordinates in the same manner as vectors.

§Examples

use chickenwire::coordinate::axial::Axial;

let coord_1 = Axial::from_coords(1, -3);
let coord_2 = Axial::from_coords(5, -12);

assert_eq!(coord_1 - coord_2, Axial::from_coords(-4, 9));
assert_eq!(coord_2 - coord_1, Axial::from_coords(4, -9));
Source§

type Output = Axial

The resulting type after applying the - operator.
Source§

fn sub(self, other: Self) -> Self

Performs the - operation. Read more
Source§

impl Copy for Axial

Source§

impl Eq for Axial

Source§

impl StructuralPartialEq for Axial

Auto Trait Implementations§

§

impl Freeze for Axial

§

impl RefUnwindSafe for Axial

§

impl Send for Axial

§

impl Sync for Axial

§

impl Unpin for Axial

§

impl UnwindSafe for Axial

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<M> Measure for M
where M: Debug + PartialOrd + Add<Output = M> + Default + Clone,

Source§

impl<N> NodeTrait for N
where N: Copy + Ord + Hash,