MutableParallelogram


public final class MutableParallelogram extends Parallelogram


Mutable parallelogram (i.e. a quadrilateral with parallel sides), defined by its center, width, height, rotation, and skew.

Summary

Public constructors

Constructs an empty MutableParallelogram with a center at the origin, a zero width, a zero height, zero rotation, and zero skew.

Public methods

boolean
equals(Object other)
@NonNull MutableVec
float

The height of the Parallelogram.

@FloatRange(from = 0.0, to = 360.0, toInclusive = false) @AngleDegreesFloat float

The rotation of the Parallelogram in degrees from its original axis-aligned orientation in the direction from the positive x-axis towards the positive y-axis.

float

The horizontal displacement between the two horizontal edges of the Parallelogram pre-rotation, as a multiple of the height.

@FloatRange(from = 0.0) float

The width of the Parallelogram.

int
final @NonNull MutableParallelogram

Fills this MutableParallelogram with the same values contained in input.

final @NonNull MutableParallelogram
populateFromCenterAndDimensions(
    @NonNull MutableVec center,
    @FloatRange(from = 0.0) float width,
    float height
)

Populates a MutableParallelogram to have a given center, width and height.

final @NonNull MutableParallelogram
populateFromCenterDimensionsAndRotationInDegrees(
    @NonNull MutableVec center,
    @FloatRange(from = 0.0) float width,
    float height,
    @FloatRange(from = 0.0, to = 360.0, toInclusive = false) @AngleDegreesFloat float rotationDegrees
)

Populates the MutableParallelogram to have a given center, width, height and rotationDegrees, with zero skew.

final @NonNull MutableParallelogram
populateFromCenterDimensionsRotationInDegreesAndSkew(
    @NonNull MutableVec center,
    @FloatRange(from = 0.0) float width,
    float height,
    @FloatRange(from = 0.0, to = 360.0, toInclusive = false) @AngleDegreesFloat float rotationDegrees,
    float skew
)

Populates the MutableParallelogram to have a given center, width, height, rotationDegrees and skew.

final @NonNull MutableParallelogram
populateFromSegmentAndPadding(@NonNull Segment segment, float padding)

Populates the MutableParallelogram to be aligned with the segment with its bounds padding units away from the segment and skew of zero.

void
void
setHeight(float height)

The height of the Parallelogram.

void
setRotationDegrees(float rotationDegrees)

The rotation of the Parallelogram in degrees from its original axis-aligned orientation in the direction from the positive x-axis towards the positive y-axis.

void
setSkew(float skew)

The horizontal displacement between the two horizontal edges of the Parallelogram pre-rotation, as a multiple of the height.

void
setWidth(float width)

The width of the Parallelogram.

@NonNull String

Inherited methods

From androidx.ink.geometry.Parallelogram
final @NonNull ImmutableBox

Returns the minimum bounding box containing the Parallelogram.

final @NonNull MutableBox

Returns the minimum bounding box containing the Parallelogram.

final @NonNull List<@NonNull ImmutableVec>

Returns a list containing the 4 corners of the Parallelogram.

final void
computeCorners(
    @NonNull MutableVec outCorner1,
    @NonNull MutableVec outCorner2,
    @NonNull MutableVec outCorner3,
    @NonNull MutableVec outCorner4
)

Populates the 4 output points with the corners of the Parallelogram.

final @NonNull List<@NonNull ImmutableVec>

Returns the semi axes of this Parallelogram.

final void

Fills the MutableVecs with the semi axes of this Parallelogram.

final float

Returns the signed area of the Parallelogram.

final boolean

Returns whether the given point is contained within the Box.

final boolean
isAlmostEqual(
    @NonNull Parallelogram other,
    @FloatRange(from = 0.0) float tolerance
)

Compares this Parallelogram with other, and returns true if both center points are considered almost equal with the given tolerance, and the difference between width and other.width is less than tolerance, and likewise for height, rotation, and skew.

Public constructors

MutableParallelogram

Added in 1.0.0-alpha07
public MutableParallelogram()

Constructs an empty MutableParallelogram with a center at the origin, a zero width, a zero height, zero rotation, and zero skew. This is intended for subsequent population with one of the populateFrom methods.

Public methods

equals

public boolean equals(Object other)

getCenter

public @NonNull MutableVec getCenter()

getHeight

public float getHeight()

The height of the Parallelogram. May be positive or negative, corresponding to whether the angle from the first semi-axis to the second is also positive or negative.

getRotationDegrees

public @FloatRange(from = 0.0, to = 360.0, toInclusive = false) @AngleDegreesFloat float getRotationDegrees()

The rotation of the Parallelogram in degrees from its original axis-aligned orientation in the direction from the positive x-axis towards the positive y-axis.

getSkew

public float getSkew()

The horizontal displacement between the two horizontal edges of the Parallelogram pre-rotation, as a multiple of the height. Equivalently, this is the cotangent of the absolute angle between the semi-axes. A Parallelogram may have a positive or negative skew, a greater skew indicates a smaller absolute angle between the semi-axes.

getWidth

public @FloatRange(from = 0.0) float getWidth()

The width of the Parallelogram. A Parallelogram may not have a negative width. If an operation on a parallelogram would result in a negative width, it is instead normalized, by negating both the width and the height, adding 180 to rotationDegrees and normalizing that to the range [0, 360).

hashCode

public int hashCode()

populateFrom

Added in 1.0.0-alpha07
public final @NonNull MutableParallelogram populateFrom(@NonNull Parallelogram input)

Fills this MutableParallelogram with the same values contained in input.

Returns the modified instance to allow chaining calls.

populateFromCenterAndDimensions

Added in 1.0.0-alpha07
public final @NonNull MutableParallelogram populateFromCenterAndDimensions(
    @NonNull MutableVec center,
    @FloatRange(from = 0.0) float width,
    float height
)

Populates a MutableParallelogram to have a given center, width and height. The resulting Parallelogram has zero rotation and skew. If the width is less than zero, the Parallelogram will be normalized.

See the corresponding fields on Parallelogram for details about these parameters.

populateFromCenterDimensionsAndRotationInDegrees

Added in 1.0.0-alpha07
public final @NonNull MutableParallelogram populateFromCenterDimensionsAndRotationInDegrees(
    @NonNull MutableVec center,
    @FloatRange(from = 0.0) float width,
    float height,
    @FloatRange(from = 0.0, to = 360.0, toInclusive = false) @AngleDegreesFloat float rotationDegrees
)

Populates the MutableParallelogram to have a given center, width, height and rotationDegrees, with zero skew. If the width is less than zero or if the rotationDegrees is not in the range [0, 360), it will be normalized.

See the corresponding fields on Parallelogram for details about these parameters.

populateFromCenterDimensionsRotationInDegreesAndSkew

Added in 1.0.0-alpha07
public final @NonNull MutableParallelogram populateFromCenterDimensionsRotationInDegreesAndSkew(
    @NonNull MutableVec center,
    @FloatRange(from = 0.0) float width,
    float height,
    @FloatRange(from = 0.0, to = 360.0, toInclusive = false) @AngleDegreesFloat float rotationDegrees,
    float skew
)

Populates the MutableParallelogram to have a given center, width, height, rotationDegrees and skew. If the width is less than zero or if rotationDegrees is not within the range [0, 360.0), it will be normalized.

See the corresponding fields on Parallelogram for details about these parameters.

populateFromSegmentAndPadding

Added in 1.0.0-alpha07
public final @NonNull MutableParallelogram populateFromSegmentAndPadding(@NonNull Segment segment, float padding)

Populates the MutableParallelogram to be aligned with the segment with its bounds padding units away from the segment and skew of zero.

setCenter

Added in 1.0.0-alpha07
public void setCenter(@NonNull MutableVec center)

setHeight

Added in 1.0.0-alpha07
public void setHeight(float height)

The height of the Parallelogram. May be positive or negative, corresponding to whether the angle from the first semi-axis to the second is also positive or negative.

setRotationDegrees

Added in 1.0.0-alpha07
public void setRotationDegrees(float rotationDegrees)

The rotation of the Parallelogram in degrees from its original axis-aligned orientation in the direction from the positive x-axis towards the positive y-axis.

setSkew

Added in 1.0.0-alpha07
public void setSkew(float skew)

The horizontal displacement between the two horizontal edges of the Parallelogram pre-rotation, as a multiple of the height. Equivalently, this is the cotangent of the absolute angle between the semi-axes. A Parallelogram may have a positive or negative skew, a greater skew indicates a smaller absolute angle between the semi-axes.

setWidth

Added in 1.0.0-alpha07
public void setWidth(float width)

The width of the Parallelogram. A Parallelogram may not have a negative width. If an operation on a parallelogram would result in a negative width, it is instead normalized, by negating both the width and the height, adding 180 to rotationDegrees and normalizing that to the range [0, 360).

toString

public @NonNull String toString()