Show / Hide Table of Contents

    Struct Vector3

    A 3D vector.

    Implements
    System.IComparable<Vector3>
    System.IEquatable<Vector3>
    Inherited Members
    System.Object.Equals(System.Object, System.Object)
    System.Object.GetType()
    System.Object.ReferenceEquals(System.Object, System.Object)
    Namespace: Elements.Geometry
    Assembly: Hypar.Elements.dll
    Syntax
    public struct Vector3 : IComparable<Vector3>, IEquatable<Vector3>

    Constructors

    Vector3(Vector3)

    Create a Vector3 by copying the components of another Vector3.

    Declaration
    public Vector3(Vector3 v)
    Parameters
    Type Name Description
    Vector3 v

    The Vector3 to copy.

    Vector3(Double, Double)

    Create a vector from x, and y coordinates.

    Declaration
    public Vector3(double x, double y)
    Parameters
    Type Name Description
    System.Double x

    The x coordinate of the vector.

    System.Double y

    Thy y coordinate of the vector.

    Vector3(Double, Double, Double)

    Create a vector.

    Declaration
    [JsonConstructor]
    public Vector3(double x, double y, double z)
    Parameters
    Type Name Description
    System.Double x

    The x component.

    System.Double y

    The y component.

    System.Double z

    The z component.

    Fields

    COS_ANGLE_EPSILON

    A tolerance for angle comparison operation of cos of 0.001 degrees.

    Declaration
    public const double COS_ANGLE_EPSILON = 0.99999999984769128
    Field Value
    Type Description
    System.Double

    EPSILON

    A tolerance for comparison operations of 1e-5.

    Declaration
    public const double EPSILON = 1E-05
    Field Value
    Type Description
    System.Double

    Properties

    Max

    The largest possible value of a Vector3.

    Declaration
    public static readonly Vector3 Max { get; }
    Property Value
    Type Description
    Vector3

    Min

    The smallest possible value of a Vector3.

    Declaration
    public static readonly Vector3 Min { get; }
    Property Value
    Type Description
    Vector3

    Origin

    Create a vector at the origin.

    Declaration
    public static readonly Vector3 Origin { get; }
    Property Value
    Type Description
    Vector3

    X

    The X component of the vector.

    Declaration
    [JsonProperty("X", Required = Required.Always)]
    public double X { get; set; }
    Property Value
    Type Description
    System.Double

    XAxis

    Create a vector along the X axis.

    Declaration
    public static readonly Vector3 XAxis { get; }
    Property Value
    Type Description
    Vector3

    Y

    The Y component of the vector.

    Declaration
    [JsonProperty("Y", Required = Required.Always)]
    public double Y { get; set; }
    Property Value
    Type Description
    System.Double

    YAxis

    Create a vector along the Y axis.

    Declaration
    public static readonly Vector3 YAxis { get; }
    Property Value
    Type Description
    Vector3

    Z

    The Z component of the vector.

    Declaration
    [JsonProperty("Z", Required = Required.Always)]
    public double Z { get; set; }
    Property Value
    Type Description
    System.Double

    ZAxis

    Create a vector along the Z axis.

    Declaration
    public static readonly Vector3 ZAxis { get; }
    Property Value
    Type Description
    Vector3

    Methods

    AngleTo(Vector3)

    The angle in degrees from this vector to the provided vector. Note that for angles in the plane that can be greater than 180 degrees, you should use Vector3.PlaneAngleTo.

    Declaration
    public double AngleTo(Vector3 v)
    Parameters
    Type Name Description
    Vector3 v

    The vector with which to measure the angle.

    Returns
    Type Description
    System.Double

    The angle in degrees between 0 and 180.

    AreCollinear(Vector3, Vector3, Vector3)

    Check whether three points are on the same line.

    Declaration
    [Obsolete("Use AreCollinearByDistance or AreCollinearByAngle instead")]
    public static bool AreCollinear(Vector3 a, Vector3 b, Vector3 c)
    Parameters
    Type Name Description
    Vector3 a

    The first point.

    Vector3 b

    The second point.

    Vector3 c

    The third point.

    Returns
    Type Description
    System.Boolean

    True if the points are on the same line, false otherwise.

    AreCollinearByAngle(Vector3, Vector3, Vector3, Double)

    Check whether three points are on the same line within certain angle. Order is important since unsigned abc angle is checked. This function is much faster than AreCollinearByDistance but angle deviation scales with the distance of points being compared. If points are far away from each other they might appear collinear even if there are large distance offsets between them.

    Declaration
    public static bool AreCollinearByAngle(Vector3 a, Vector3 b, Vector3 c, double cosAngleTolerance = 0.99999999984769128)
    Parameters
    Type Name Description
    Vector3 a

    The first point.

    Vector3 b

    The second point.

    Vector3 c

    The third point.

    System.Double cosAngleTolerance

    Angle tolerance as cos.

    Returns
    Type Description
    System.Boolean

    AreCollinearByDistance(Vector3, Vector3, Vector3, Double)

    Check whether three points are on the same line within certain distance. This function is slower than AreCollinearByAngle and less suitable for high complexity code.

    Declaration
    public static bool AreCollinearByDistance(Vector3 a, Vector3 b, Vector3 c, double tolerance = 1E-05)
    Parameters
    Type Name Description
    Vector3 a

    The first point.

    Vector3 b

    The second point.

    Vector3 c

    The third point.

    System.Double tolerance

    Distance tolerance.

    Returns
    Type Description
    System.Boolean

    True if the points are on the same line, false otherwise.

    AreCoplanar(Vector3, Vector3, Vector3, Vector3)

    Are four provided points on the same plane?

    Declaration
    public static bool AreCoplanar(Vector3 a, Vector3 b, Vector3 c, Vector3 d)
    Parameters
    Type Name Description
    Vector3 a
    Vector3 b
    Vector3 c
    Vector3 d
    Returns
    Type Description
    System.Boolean

    AtNEqualSpacesAlongLine(Line, Int32, Boolean)

    Create vectors at n equal spaces along the provided line.

    Declaration
    public static IList<Vector3> AtNEqualSpacesAlongLine(Line line, int n, bool includeEnds = false)
    Parameters
    Type Name Description
    Line line

    The line.

    System.Int32 n

    The number of samples along the line.

    System.Boolean includeEnds

    A flag indicating whether or not to include points for the start and end of the line.

    Returns
    Type Description
    System.Collections.Generic.IList<Vector3>

    Average(Vector3)

    Compute the average of this Vector3 and v.

    Declaration
    public Vector3 Average(Vector3 v)
    Parameters
    Type Name Description
    Vector3 v

    The vector with which to compute the average.

    Returns
    Type Description
    Vector3

    A vector which is the average of this and v.

    CCW(Vector3, Vector3, Vector3)

    Check whether three points are wound CCW in two dimensions.

    Declaration
    public static double CCW(Vector3 a, Vector3 b, Vector3 c)
    Parameters
    Type Name Description
    Vector3 a

    The first point.

    Vector3 b

    The second point.

    Vector3 c

    The third point.

    Returns
    Type Description
    System.Double

    Greater than 0 if the points are CCW, less than 0 if they are CW, and 0 if they are collinear.

    ClosestPointOn(Line, Boolean)

    Get the closest point on the line from this point.

    Declaration
    public Vector3 ClosestPointOn(Line line, bool infinite = false)
    Parameters
    Type Name Description
    Line line

    The line on which to find the closest point.

    System.Boolean infinite

    If true, line will be treated as infinite. (False by default)

    Returns
    Type Description
    Vector3

    The closest point on the line from this point.

    CompareTo(Vector3)

    Implement IComparable interface.

    Declaration
    public int CompareTo(Vector3 v)
    Parameters
    Type Name Description
    Vector3 v
    Returns
    Type Description
    System.Int32

    ComputeDefaultBasisVectors()

    Compute basis vectors for this vector. By default, the cross product of the world Z axis and this vector are used to compute the U direction. If this vector is parallel the world Z axis, then the world Y axis is used instead.

    Declaration
    public (Vector3 U, Vector3 V) ComputeDefaultBasisVectors()
    Returns
    Type Description
    System.ValueTuple<Vector3, Vector3>

    Cross(Vector3)

    Compute the cross product of this vector and v.

    Declaration
    public Vector3 Cross(Vector3 v)
    Parameters
    Type Name Description
    Vector3 v

    The vector with which to compute the cross product.

    Returns
    Type Description
    Vector3

    Cross(Double, Double, Double)

    Compute the cross product of this vector and a vector composed of the provided components.

    Declaration
    public Vector3 Cross(double x, double y, double z)
    Parameters
    Type Name Description
    System.Double x

    X

    System.Double y

    Y

    System.Double z

    Z

    Returns
    Type Description
    Vector3

    DistanceTo(Line)

    Find the distance from this point to the line.

    Declaration
    public double DistanceTo(Line line)
    Parameters
    Type Name Description
    Line line
    Returns
    Type Description
    System.Double

    DistanceTo(Line, out Vector3)

    Find the distance from this point to the line, and output the location of the closest point on that line. Using formula from https://diego.assencio.com/?index=ec3d5dfdfc0b6a0d147a656f0af332bd

    Declaration
    public double DistanceTo(Line line, out Vector3 closestPoint)
    Parameters
    Type Name Description
    Line line

    The line to find the distance to.

    Vector3 closestPoint

    The point on the line that is closest to this point.

    Returns
    Type Description
    System.Double

    DistanceTo(Plane)

    The distance from this point to the plane. The distance will be negative when this point lies "behind" the plane.

    Declaration
    public double DistanceTo(Plane p)
    Parameters
    Type Name Description
    Plane p

    The plane.

    Returns
    Type Description
    System.Double

    DistanceTo(Polygon)

    Find the shortest distance from this point to any point within the polygon

    Declaration
    public double DistanceTo(Polygon polygon)
    Parameters
    Type Name Description
    Polygon polygon

    The polygon for computing the distance

    Returns
    Type Description
    System.Double

    DistanceTo(Polygon, out Vector3)

    Find the shortest distance from this point to any point within the polygon, and output the location of the closest point on that polygon.

    Declaration
    public double DistanceTo(Polygon polygon, out Vector3 closestPoint)
    Parameters
    Type Name Description
    Polygon polygon

    The polygon for computing the distance

    Vector3 closestPoint

    Point within the polygon that is closest to this point

    Returns
    Type Description
    System.Double

    DistanceTo(Polyline)

    Find the shortest distance from this point to any point on the polyline, and output the location of the closest point on that polyline.

    Declaration
    public double DistanceTo(Polyline polyline)
    Parameters
    Type Name Description
    Polyline polyline

    The polyline for computing the distance.

    Returns
    Type Description
    System.Double

    DistanceTo(Polyline, out Vector3)

    Find the shortest distance from this point to any point on the polyline, and output the location of the closest point on that polyline.

    Declaration
    public double DistanceTo(Polyline polyline, out Vector3 closestPoint)
    Parameters
    Type Name Description
    Polyline polyline

    The polyline for computing the distance.

    Vector3 closestPoint

    The point on the polyline that is closest to this point.

    Returns
    Type Description
    System.Double

    DistanceTo(Ray)

    The distance from this point to the ray. The ray is treated as being infinitely long.

    Declaration
    public double DistanceTo(Ray ray)
    Parameters
    Type Name Description
    Ray ray

    The target ray.

    Returns
    Type Description
    System.Double

    DistanceTo(Vector3)

    The distance from this point to v.

    Declaration
    public double DistanceTo(Vector3 v)
    Parameters
    Type Name Description
    Vector3 v

    The target vector.

    Returns
    Type Description
    System.Double

    The distance between this vector and the provided vector.

    DistanceTo((Vector3 from, Vector3 to), out Vector3)

    Find the distance from this point to the edge, and output the location of the closest point on that line. Using formula from https://diego.assencio.com/?index=ec3d5dfdfc0b6a0d147a656f0af332bd

    Declaration
    public double DistanceTo((Vector3 from, Vector3 to) edge, out Vector3 closestPoint)
    Parameters
    Type Name Description
    System.ValueTuple<Vector3, Vector3> edge

    The edge to find the distance to.

    Vector3 closestPoint

    The point on the line that is closest to this point.

    Returns
    Type Description
    System.Double

    Dot(Vector3)

    Compute the dot product of this vector and v.

    Declaration
    public double Dot(Vector3 v)
    Parameters
    Type Name Description
    Vector3 v

    The vector with which to compute the dot product.

    Returns
    Type Description
    System.Double

    A value between 1 and -1.

    Dot(Double, Double, Double)

    Compute the dot product of this vector and a vector composed of the provided components.

    Declaration
    public double Dot(double x, double y, double z)
    Parameters
    Type Name Description
    System.Double x

    X

    System.Double y

    Y

    System.Double z

    Z

    Returns
    Type Description
    System.Double

    A value between 1 and -1.

    Equals(Vector3)

    Is this vector equal to the provided vector?

    Declaration
    public bool Equals(Vector3 other)
    Parameters
    Type Name Description
    Vector3 other

    The vector to test.

    Returns
    Type Description
    System.Boolean

    Returns true if all components of the two vectors are within Epsilon, otherwise false.

    Equals(Object)

    Is this vector equal to the provided vector?

    Declaration
    public override bool Equals(object other)
    Parameters
    Type Name Description
    System.Object other

    The vector to test.

    Returns
    Type Description
    System.Boolean

    Returns true if all components of the two vectors are within Epsilon, otherwise false.

    Overrides
    System.ValueType.Equals(System.Object)

    GetHashCode()

    Get the hash code for the vector.

    Declaration
    public override int GetHashCode()
    Returns
    Type Description
    System.Int32
    Overrides
    System.ValueType.GetHashCode()

    IsAlmostEqualTo(Vector3, Double)

    Determine whether this vector's components are equal to those of v, within tolerance.

    Declaration
    public bool IsAlmostEqualTo(Vector3 v, double tolerance = 1E-05)
    Parameters
    Type Name Description
    Vector3 v

    The vector to compare.

    System.Double tolerance

    Optional custom tolerance value.

    Returns
    Type Description
    System.Boolean

    True if the difference of this vector and the supplied vector's components are all within Tolerance, otherwise false.

    IsAlmostEqualTo(Double, Double, Double)

    Determine whether this vector's components are equal to the provided components, within tolerance.

    Declaration
    public bool IsAlmostEqualTo(double x, double y, double z = 0)
    Parameters
    Type Name Description
    System.Double x

    The x component to compare.

    System.Double y

    The y component to compare.

    System.Double z

    The z component to compare.

    Returns
    Type Description
    System.Boolean

    True if the difference of this vector and the supplied vector's components are all within Tolerance, otherwise false.

    IsNaN()

    Are any components of this vector NaN?

    Declaration
    public bool IsNaN()
    Returns
    Type Description
    System.Boolean

    True if any components are NaN otherwise false.

    IsParallelTo(Vector3, Double)

    Determine whether this vector is parallel to v.

    Declaration
    public bool IsParallelTo(Vector3 v, double tolerance = 1E-05)
    Parameters
    Type Name Description
    Vector3 v

    The vector to compare to this vector.

    System.Double tolerance

    The amount of tolerance in the parallel comparison.

    Returns
    Type Description
    System.Boolean

    True if the vectors are parallel, otherwise false.

    IsUnitized()

    Is this vector of unit length?

    Declaration
    public bool IsUnitized()
    Returns
    Type Description
    System.Boolean

    True if the vector is of unit length, otherwise false.

    IsZero()

    Is this vector zero length?

    Declaration
    public bool IsZero()
    Returns
    Type Description
    System.Boolean

    True if this vector's components are all less than Epsilon.

    Length()

    Get the length of this vector.

    Declaration
    public double Length()
    Returns
    Type Description
    System.Double

    LengthSquared()

    Get the squared length of this vector.

    Declaration
    public double LengthSquared()
    Returns
    Type Description
    System.Double

    Negate()

    Construct a new vector which is the inverse of this vector.

    Declaration
    public Vector3 Negate()
    Returns
    Type Description
    Vector3

    A new vector which is the inverse of this vector.

    PlaneAngleTo(Vector3)

    Calculate a counter-clockwise plane angle between this vector and the provided vector in the XY plane.

    Declaration
    public double PlaneAngleTo(Vector3 v)
    Parameters
    Type Name Description
    Vector3 v

    The vector with which to measure the angle.

    Returns
    Type Description
    System.Double

    Angle in degrees between 0 and 360, or NaN if the projected input vectors are invalid.

    PlaneAngleTo(Vector3, Vector3)

    Calculate a counter-clockwise plane angle between this vector and the provided vector, projected to the plane perpendicular to the provided normal.

    Declaration
    public double PlaneAngleTo(Vector3 v, Vector3 normal)
    Parameters
    Type Name Description
    Vector3 v

    The vector with which to measure the angle.

    Vector3 normal

    The normal of the plane in which you wish to calculate the angle.

    Returns
    Type Description
    System.Double

    Angle in degrees between 0 and 360, or NaN if the projected input vectors are invalid.

    Project(Plane)

    Project this vector onto the plane.

    Declaration
    public Vector3 Project(Plane p)
    Parameters
    Type Name Description
    Plane p

    The plane on which to project the point.

    Returns
    Type Description
    Vector3

    ProjectAlong(Vector3, Plane)

    Project this vector onto the plane along a vector.

    Declaration
    public Vector3 ProjectAlong(Vector3 v, Plane p)
    Parameters
    Type Name Description
    Vector3 v

    The vector along which t project.

    Plane p

    The plane on which to project.

    Returns
    Type Description
    Vector3

    A point on the plane.

    ProjectOnto(Vector3)

    Project vector a onto this vector.

    Declaration
    public Vector3 ProjectOnto(Vector3 a)
    Parameters
    Type Name Description
    Vector3 a

    The vector to project onto this vector.

    Returns
    Type Description
    Vector3

    A new vector which is the projection of a onto this vector.

    ToArray()

    Convert a vector's components to an array.

    Declaration
    public double[] ToArray()
    Returns
    Type Description
    System.Double[]

    An array of comprised of the x, y, and z components of this vector.

    ToString()

    A string representation of the vector.

    Declaration
    public override string ToString()
    Returns
    Type Description
    System.String

    The string representation of this vector.

    Overrides
    System.ValueType.ToString()

    TripleProduct(Vector3, Vector3)

    Check if two vectors are coplanar.

    Declaration
    public double TripleProduct(Vector3 b, Vector3 c)
    Parameters
    Type Name Description
    Vector3 b

    The second vector.

    Vector3 c

    The third vector.

    Returns
    Type Description
    System.Double

    True is the vectors are coplanar, otherwise false.

    Unitized()

    Return a new vector which is the unitized version of this vector.

    Declaration
    public Vector3 Unitized()
    Returns
    Type Description
    Vector3

    Operators

    Addition(Vector3, Vector3)

    Add two vectors.

    Declaration
    public static Vector3 operator +(Vector3 a, Vector3 b)
    Parameters
    Type Name Description
    Vector3 a

    The first vector.

    Vector3 b

    The second vector.

    Returns
    Type Description
    Vector3

    A vector which is the sum of a and b.

    Division(Vector3, Double)

    Divide a vector by a scalar.

    Declaration
    public static Vector3 operator /(Vector3 v, double a)
    Parameters
    Type Name Description
    Vector3 v

    The vector to divide.

    System.Double a

    The scalar divisor.

    Returns
    Type Description
    Vector3

    A vector whose magnitude is multiplied by a.

    Equality(Vector3, Vector3)

    Are the two vectors the same within Epsilon?

    Declaration
    public static bool operator ==(Vector3 a, Vector3 b)
    Parameters
    Type Name Description
    Vector3 a
    Vector3 b
    Returns
    Type Description
    System.Boolean

    GreaterThan(Vector3, Vector3)

    Compute whether all components of vector a are greater than those of vector b.

    Declaration
    public static bool operator>(Vector3 a, Vector3 b)
    Parameters
    Type Name Description
    Vector3 a

    The first vector.

    Vector3 b

    The second vector.

    Returns
    Type Description
    System.Boolean

    True if all of a's components are greater than those of b, otherwise false.

    GreaterThanOrEqual(Vector3, Vector3)

    Compute whether all components of vector a are greater than or equal to those of vector b.

    Declaration
    public static bool operator >=(Vector3 a, Vector3 b)
    Parameters
    Type Name Description
    Vector3 a

    The first vector.

    Vector3 b

    The second vector.

    Returns
    Type Description
    System.Boolean

    True if all of a's components are greater than or equal to all of those of b, otherwise false.

    Implicit((Double X, Double Y, Double Z) to Vector3)

    Automatically convert a tuple of three doubles into a Vector3.

    Declaration
    public static implicit operator Vector3((double X, double Y, double Z) vector)
    Parameters
    Type Name Description
    System.ValueTuple<System.Double, System.Double, System.Double> vector

    An (X,Y,Z) tuple of doubles.

    Returns
    Type Description
    Vector3

    Implicit((Double X, Double Y) to Vector3)

    Automatically convert a tuple of two doubles into a Vector3.

    Declaration
    public static implicit operator Vector3((double X, double Y) vector)
    Parameters
    Type Name Description
    System.ValueTuple<System.Double, System.Double> vector

    An (X,Y) tuple of doubles.

    Returns
    Type Description
    Vector3

    Implicit((Int32 X, Int32 Y, Int32 Z) to Vector3)

    Automatically convert a tuple of three ints into a Vector3.

    Declaration
    public static implicit operator Vector3((int X, int Y, int Z) vector)
    Parameters
    Type Name Description
    System.ValueTuple<System.Int32, System.Int32, System.Int32> vector

    An (X,Y,Z) tuple of ints.

    Returns
    Type Description
    Vector3

    Implicit((Int32 X, Int32 Y) to Vector3)

    Automatically convert a tuple of two ints into a Vector3.

    Declaration
    public static implicit operator Vector3((int X, int Y) vector)
    Parameters
    Type Name Description
    System.ValueTuple<System.Int32, System.Int32> vector

    An (X,Y) tuple of ints.

    Returns
    Type Description
    Vector3

    Inequality(Vector3, Vector3)

    Are the two vectors not the same within Epsilon?

    Declaration
    public static bool operator !=(Vector3 a, Vector3 b)
    Parameters
    Type Name Description
    Vector3 a
    Vector3 b
    Returns
    Type Description
    System.Boolean

    LessThan(Vector3, Vector3)

    Compute whether all components of vector a are less than those of vector b.

    Declaration
    public static bool operator <(Vector3 a, Vector3 b)
    Parameters
    Type Name Description
    Vector3 a

    The first vector.

    Vector3 b

    The second vector.

    Returns
    Type Description
    System.Boolean

    True if all of a's components are less than those of b, otherwise false.

    LessThanOrEqual(Vector3, Vector3)

    Compute whether all components of vector a are less than or equal to those of vector b.

    Declaration
    public static bool operator <=(Vector3 a, Vector3 b)
    Parameters
    Type Name Description
    Vector3 a

    The first vector.

    Vector3 b

    The second vector.

    Returns
    Type Description
    System.Boolean

    True if all of a's components are less than or equal to all of those of b, otherwise false.

    Multiply(Vector3, Double)

    Multiply a vector and a scalar.

    Declaration
    public static Vector3 operator *(Vector3 v, double a)
    Parameters
    Type Name Description
    Vector3 v

    The vector to multiply.

    System.Double a

    The scalar value to multiply.

    Returns
    Type Description
    Vector3

    A vector whose magnitude is multiplied by a.

    Multiply(Double, Vector3)

    Multiply a scalar and a vector.

    Declaration
    public static Vector3 operator *(double a, Vector3 v)
    Parameters
    Type Name Description
    System.Double a

    The scalar value to multiply.

    Vector3 v

    The vector to multiply.

    Returns
    Type Description
    Vector3

    A vector whose magnitude is multiplied by a.

    Subtraction(Vector3, Vector3)

    Subtract two vectors.

    Declaration
    public static Vector3 operator -(Vector3 a, Vector3 b)
    Parameters
    Type Name Description
    Vector3 a

    The first vector.

    Vector3 b

    The second vector.

    Returns
    Type Description
    Vector3

    A vector which is the difference between a and b.

    Implements

    System.IComparable<T>
    System.IEquatable<T>