O1Library Docs
Fall 2026
Docs API

# Pos

o1.world.Pos
See the Pos companion object
final case class Pos(x: Double, y: Double)

Each instance of this class represents a location on a two-dimensional plane. A `Pos` object is essentially a pair of two coordinates, `x` and `y`. `Pos` objects are immutable.

This class has an alias in the top-level package o1, so it’s accessible to students simply via `import o1.*`.

## Parameters

x

  the x coordinate of the `Pos`

y

  the y coordinate of the `Pos`

## Attributes

Companion
  object
Graph
Supertypes
  trait Serializable
  trait Product
  trait Equals
  class Object
  trait Matchable
  class Any
  Show all

## Members list

### Value members

#### Concrete methods

infix inline def *(factor: Double): Pos

Returns a `Pos` whose two coordinates are obtained by multiplying this one’s `x` and `y` by the given factor. For instance, (2,-3) multiplied by 10 is (20,-30). The expressions `myPos * n` and `myPos.multiply(n)` are equivalent.

Returns a `Pos` whose two coordinates are obtained by multiplying this one’s `x` and `y` by the given factor. For instance, (2,-3) multiplied by 10 is (20,-30). The expressions `myPos * n` and `myPos.multiply(n)` are equivalent.

## Attributes

infix inline def +(another: Pos): Pos

Adds the `x` and `y` of the given `Pos` to the `x` and `y` of this `Pos`, respectively. Returns the resulting `Pos`. The expressions `pos1 + pos2`, `pos1.add(pos2)`, and `pos1.offset(pos2)` are equivalent.

Adds the `x` and `y` of the given `Pos` to the `x` and `y` of this `Pos`, respectively. Returns the resulting `Pos`. The expressions `pos1 + pos2`, `pos1.add(pos2)`, and `pos1.offset(pos2)` are equivalent.

## Attributes

infix inline def -(another: Pos): Pos

Subtracts the `x` and `y` of the given `Pos` from the `x` and `y` of this `Pos`, respectively. Returns the resulting `Pos`. The expressions `pos1 - pos2` and `pos1.subtract(pos2)` are equivalent.

Subtracts the `x` and `y` of the given `Pos` from the `x` and `y` of this `Pos`, respectively. Returns the resulting `Pos`. The expressions `pos1 - pos2` and `pos1.subtract(pos2)` are equivalent.

## Attributes

infix inline def /(divisor: Double): Pos

Returns a `Pos` whose two coordinates are obtained by dividing this one’s `x` and `y` by the given number. For instance, (20,-30) divided by 10 is (2,-3). The expressions `myPos / n` and `myPos.divide(n)` are equivalent.

Returns a `Pos` whose two coordinates are obtained by dividing this one’s `x` and `y` by the given number. For instance, (20,-30) divided by 10 is (2,-3). The expressions `myPos / n` and `myPos.divide(n)` are equivalent.

## Attributes

inline def add(dx: Double, dy: Double): Pos

Adds the two given values to the `x` and `y` of this `Pos`, respectively. Returns the resulting `Pos`. The expressions `myPos.add(dx, dy)` and `myPos.offset(dx, dy)` are equivalent.

Adds the two given values to the `x` and `y` of this `Pos`, respectively. Returns the resulting `Pos`. The expressions `myPos.add(dx, dy)` and `myPos.offset(dx, dy)` are equivalent.

## Attributes

inline def add(pos: Pos): Pos

Adds the `x` and `y` of the given `Pos` to the `x` and `y` of this `Pos`, respectively. Returns the resulting `Pos`. The expressions `pos1.add(pos2)`, `pos1.offset(pos2)`, and `pos1 + pos2` are equivalent.

Adds the `x` and `y` of the given `Pos` to the `x` and `y` of this `Pos`, respectively. Returns the resulting `Pos`. The expressions `pos1.add(pos2)`, `pos1.offset(pos2)`, and `pos1 + pos2` are equivalent.

## Attributes

inline def addX(dx: Double): Pos

Returns a `Pos` whose `x` coordinate is greater than this `Pos`’s by the given amount.

Returns a `Pos` whose `x` coordinate is greater than this `Pos`’s by the given amount.

## Attributes

inline def addY(dy: Double): Pos

Returns a `Pos` whose `y` coordinate is greater than this `Pos`’s by the given amount.

Returns a `Pos` whose `y` coordinate is greater than this `Pos`’s by the given amount.

## Attributes

inline def clamp(xMin: Double, xMax: Double, yMin: Double, yMax: Double): Pos

Returns a `Pos` that is as close to this `Pos` as possible but whose `x` and `y` are between the given lower and upper bounds (inclusive).

Returns a `Pos` that is as close to this `Pos` as possible but whose `x` and `y` are between the given lower and upper bounds (inclusive).

## Parameters

xMax

  the greatest possible value of `x` in the resulting `Pos`; must not be below `xMin`

xMin

  the least possible value of `x` in the resulting `Pos`; must not exceed `xMax`

yMax

  the greatest possible value of `y` in the resulting `Pos`; must not be below `yMin`

yMin

  the least possible value of `y` in the resulting `Pos`; must not exceed `yMax`

## Attributes

See also

  noLowerThan, noHigherThan, noFurtherLeftThan, noFurtherRightThan, clampX, clampY

inline def clampX(min: Double, max: Double): Pos

Returns a `Pos` that is as close to this `Pos` as possible but whose `x` is between the given lower and upper bounds (inclusive).

Returns a `Pos` that is as close to this `Pos` as possible but whose `x` is between the given lower and upper bounds (inclusive).

## Parameters

max

  the greatest possible value of `x` in the resulting `Pos`; must not be below `min`

min

  the least possible value of `x` in the resulting `Pos`; must not exceed `max`

## Attributes

See also

  noFurtherLeftThan, noFurtherRightThan, clampY, clamp

inline def clampY(min: Double, max: Double): Pos

Returns a `Pos` that is as close to this `Pos` as possible but whose `y` is between the given lower and upper bounds (inclusive).

Returns a `Pos` that is as close to this `Pos` as possible but whose `y` is between the given lower and upper bounds (inclusive).

## Parameters

max

  the greatest possible value of `y` in the resulting `Pos`; must not be below `min`

min

  the least possible value of `y` in the resulting `Pos`; must not exceed `max`

## Attributes

See also

  noLowerThan, noHigherThan, clampX, clamp

def description: String

Returns a `String` description of the `Pos`. It has the form `"(x,y)"`.

Returns a `String` description of the `Pos`. It has the form `"(x,y)"`.

## Attributes

See also

  roughly

inline def directionOf(destination: Pos): Direction

Returns the Direction from this `Pos` towards the given other `Pos`.

Returns the Direction from this `Pos` towards the given other `Pos`.

## Attributes

inline def distance(another: Pos): Double

Returns the distance between this `Pos` and the given `Pos` “as the crow flies”.

Returns the distance between this `Pos` and the given `Pos` “as the crow flies”.

## Attributes

inline def divide(divisor: Double): Pos

Returns a `Pos` whose two coordinates are obtained by dividing this one’s `x` and `y` by the given number. For instance, (20,-30) divided by 10 is (2,-3). The expressions `myPos.divide(n)` and `myPos / n` are equivalent.

Returns a `Pos` whose two coordinates are obtained by dividing this one’s `x` and `y` by the given number. For instance, (20,-30) divided by 10 is (2,-3). The expressions `myPos.divide(n)` and `myPos / n` are equivalent.

## Attributes

inline def multiply(factor: Double): Pos

Returns a `Pos` whose two coordinates are obtained by multiplying this one’s `x` and `y` by the given factor. For instance, (2,-3) multiplied by 10 is (20,-30). The expressions `myPos.multiply(n)` and `myPos * n` are equivalent.

Returns a `Pos` whose two coordinates are obtained by multiplying this one’s `x` and `y` by the given factor. For instance, (2,-3) multiplied by 10 is (20,-30). The expressions `myPos.multiply(n)` and `myPos * n` are equivalent.

## Attributes

inline def nextPos(velocity: Velocity): Pos

Returns the `Pos` that an object moving at the given velocity reaches in one unit of time. That is, adds the `dx` and `dy` components of the given velocity to this `Pos` and returns the result.

Returns the `Pos` that an object moving at the given velocity reaches in one unit of time. That is, adds the `dx` and `dy` components of the given velocity to this `Pos` and returns the result.

## Attributes

inline def noFurtherLeftThan(xMin: Double): Pos

Returns a `Pos` that is as close to this `Pos` as possible but has an `x` coordinate equal to or greater than the given limit.

Returns a `Pos` that is as close to this `Pos` as possible but has an `x` coordinate equal to or greater than the given limit.

## Attributes

See also

  noHigherThan, noFurtherRightThan, clampX, clamp

inline def noFurtherRightThan(xMax: Double): Pos

Returns a `Pos` that is as close to this `Pos` as possible but has a `y` coordinate less than or equal to the given limit.

Returns a `Pos` that is as close to this `Pos` as possible but has a `y` coordinate less than or equal to the given limit.

## Attributes

See also

  noLowerThan, noFurtherLeftThan, clampX, clamp

inline def noHigherThan(yMin: Double): Pos

Returns a `Pos` that is as close to this `Pos` as possible but has a `y` coordinate equal to or greater than the given limit.

Returns a `Pos` that is as close to this `Pos` as possible but has a `y` coordinate equal to or greater than the given limit.

## Attributes

See also

  noLowerThan, noFurtherLeftThan, clampY, clamp

inline def noLowerThan(yMax: Double): Pos

Returns a `Pos` that is as close to this `Pos` as possible but has a `y` coordinate less than or equal to the given limit.

Returns a `Pos` that is as close to this `Pos` as possible but has a `y` coordinate less than or equal to the given limit.

## Attributes

See also

  noHigherThan, noFurtherRightThan, clampY, clamp

inline def offset(dx: Double, dy: Double): Pos

Returns the `Pos` that is `dx` and `dy` removed from this `Pos`. The expressions `myPos.offset(dx, dy)` and `myPos.add(dx, dy)` are equivalent.

Returns the `Pos` that is `dx` and `dy` removed from this `Pos`. The expressions `myPos.offset(dx, dy)` and `myPos.add(dx, dy)` are equivalent.

## Attributes

inline def offset(another: Pos): Pos

Returns the `Pos` that is removed from this `Pos` by the amount indicated by the given `Pos`. The expressions `pos1.offset(pos2)`, `pos1.add(pos2)`, and `pos1 + pos2` are equivalent.

Returns the `Pos` that is removed from this `Pos` by the amount indicated by the given `Pos`. The expressions `pos1.offset(pos2)`, `pos1.add(pos2)`, and `pos1 + pos2` are equivalent.

## Attributes

def roughly: String

Returns a `String` description of the `Pos` that is identical to toString except it has two decimals for each coordinate.

Returns a `String` description of the `Pos` that is identical to toString except it has two decimals for each coordinate.

## Attributes

inline def setX(newX: Double): Pos

Returns a `Pos` whose `x` equals the given value and whose `y` equals this `Pos`’s `y`.

Returns a `Pos` whose `x` equals the given value and whose `y` equals this `Pos`’s `y`.

## Attributes

inline def setY(newY: Double): Pos

Returns a `Pos` whose `x` equals this `Pos`’s `x` and whose `y` equals the given value.

Returns a `Pos` whose `x` equals this `Pos`’s `x` and whose `y` equals the given value.

## Attributes

inline def subtract(another: Pos): Pos

Subtracts the `x` and `y` of the given `Pos` from the `x` and `y` of this `Pos`, respectively. Returns the resulting `Pos`. The expressions `pos1.subtract(pos2)` and `pos1 - pos2` are equivalent.

Subtracts the `x` and `y` of the given `Pos` from the `x` and `y` of this `Pos`, respectively. Returns the resulting `Pos`. The expressions `pos1.subtract(pos2)` and `pos1 - pos2` are equivalent.

## Attributes

inline def subtract(dx: Double, dy: Double): Pos

Subtracts the two given values from the `x` and `y` of this `Pos`, respectively. Returns the resulting `Pos`.

Subtracts the two given values from the `x` and `y` of this `Pos`, respectively. Returns the resulting `Pos`.

## Attributes

inline def subtractX(dx: Double): Pos

Returns a `Pos` whose `x` coordinate is less than this `Pos`’s by the given amount.

Returns a `Pos` whose `x` coordinate is less than this `Pos`’s by the given amount.

## Attributes

inline def subtractY(dy: Double): Pos

Returns a `Pos` whose `y` coordinate is less than this `Pos`’s by the given amount.

Returns a `Pos` whose `y` coordinate is less than this `Pos`’s by the given amount.

## Attributes

inline def toPair: (Double, Double)

Returns the `x` and `y` coordinates of the `Pos` as a tuple.

Returns the `x` and `y` coordinates of the `Pos` as a tuple.

## Attributes

inline override def toString: String

Returns a `String` description of the `Pos`. It has the form `"(x,y)"`. (This is equivalent to description.)

Returns a `String` description of the `Pos`. It has the form `"(x,y)"`. (This is equivalent to description.)

## Attributes

See also

  roughly

Definition Classes
  Any

inline def turnInto[Result](f: (Double, Double) => Result): Result

Applies the given function to the two coordinates of the `Pos` and returns the result.

Applies the given function to the two coordinates of the `Pos` and returns the result.

## Attributes

inline def unary_-: Pos

Returns the `Pos` that is the opposite of this `Pos`. For instance, the opposite of (2,-3) is (-2,3).

Returns the `Pos` that is the opposite of this `Pos`. For instance, the opposite of (2,-3) is (-2,3).

## Attributes

inline def vectorTo(destination: Pos): Pos

Returns a `Pos` those `x` and `y` capture the relative distance from this `Pos` towards the given `Pos`. That is, subtracts the `x` and `y` of `this` from the `x` and `y` of the given `Pos`, respectively. The expressions `pos1.vectorTo(pos2)` and `pos2 - pos1` are equivalent.

Returns a `Pos` those `x` and `y` capture the relative distance from this `Pos` towards the given `Pos`. That is, subtracts the `x` and `y` of `this` from the `x` and `y` of the given `Pos`, respectively. The expressions `pos1.vectorTo(pos2)` and `pos2 - pos1` are equivalent.

## Attributes

inline def withX(computeNew: Double => Double): Pos

Returns a `Pos` whose `x` is determined by applying the given function to the `x` of this `Pos` and whose `y` equals that of this `Pos`.

Returns a `Pos` whose `x` is determined by applying the given function to the `x` of this `Pos` and whose `y` equals that of this `Pos`.

## Parameters

computeNew

  a function that takes in an x coordinate and returns the x for the resulting `Pos`

## Attributes

inline def withXY(computeNew: (Double, Double) => (Double, Double)): Pos

Returns a `Pos` whose `x` and `y` are determined by applying the given function to the `x` and `y` of this `Pos`.

Returns a `Pos` whose `x` and `y` are determined by applying the given function to the `x` and `y` of this `Pos`.

## Parameters

computeNew

  a function that takes in an x and a y and returns a pair that contains the coordinates of the resulting `Pos`

## Attributes

inline def withY(computeNew: Double => Double): Pos

Returns a `Pos` whose `x` equals that of this `Pos` and whose `y` is determined by applying the given function to the `y` of this `Pos`.

Returns a `Pos` whose `x` equals that of this `Pos` and whose `y` is determined by applying the given function to the `y` of this `Pos`.

## Parameters

computeNew

  a function that takes in a y coordinate and returns the y for the resulting `Pos`

## Attributes

inline def xDiff(another: Pos): Double

Returns the difference between this `Pos`’s `x` coordinate and the given one’s.

Returns the difference between this `Pos`’s `x` coordinate and the given one’s.

## Attributes

Returns

  the difference, which is positive if the given `Pos`’s `x` is greater than this one’s and negative if the reverse is true

inline def yDiff(another: Pos): Double

Returns the difference between this `Pos`’s `y` coordinate and the given one’s.

Returns the difference between this `Pos`’s `y` coordinate and the given one’s.

## Attributes

Returns

  the difference, which is positive if the given `Pos`’s `y` is greater than this one’s and negative if the reverse is true

#### Inherited methods

def productElementNames: Iterator[String]

An iterator over the names of all the elements of this product.

An iterator over the names of all the elements of this product.

## Attributes

Inherited from:
  Product

def productIterator: Iterator[Any]

An iterator over all the elements of this product.

An iterator over all the elements of this product.

## Attributes

Returns

  in the default implementation, an `Iterator[Any]`

Inherited from:
  Product