O1Library Docs
Fall 2026
Docs API

# Direction

o1.world.Direction
See the Direction companion object
sealed case class Direction

Each instance of this class represents a direction on a two-dimensional plane. A direction consists of two components: `dx` and `dy`, each of which is a number between -1.0 and +1.0 (inclusive). `dx` indicates the degree to which the x coordinate changes when moving in that direction; `dy` is the same for the y coordinate. The x coordinate increases rightwards and y downwards.

For example, moving straight rightwards can be thought of a moving in a `Direction` with a `dx` of +1.0 and a `dy` of 0.0; by comparison, the upward direction would have a `dx` of 0.0 and a `dy` of -1.0. . Diagonals have non-zero values for both `dx` and `dy`.

The `dx` and `dy` of any `Direction` always sum up to (roughly) 1.0, with the exception of the special value NoDirection which represents the lack of a direction and as zero for both components. (In this, a `Direction` is different from a Velocity, which is a combination of a direction of movement and a speed.)

You don’t instantiate `Direction` directly; instead, you create `Direction`s with the methods on this class’s companion object. Among other things, you can:

- construct a direction from two differences between coordinates, as in `Direction.fromDeltas(-100, 50)`; or
- create a direction that corresponds to a given angle, as in `Direction.fromDegrees(60)` and `Direction.fromRadians(-scala.math.Pi / 4)`.

Some of the methods of a `Direction` object also create and return new `Direction`s, as does the directionOf method on `Pos` objects. Moreover, this class’s companion object has a few predefined `Direction` constants: Up Down, Left, Right, and NoDirection.

`Direction` 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

dx

  the amount of change in the x coordinate when moving in this direction, relative to `dy`

dy

  the amount of change in the y coordinate when moving in this direction, relative to `dx`

## 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

def +(another: Direction): Direction

Returns a direction that is, clockwise, removed from this direction by a number of degrees specified by the given direction. Calling `dir1 + dir2` is equivalent to calling `dir1.counterclockwise(dir2.toDegrees)`

Returns a direction that is, clockwise, removed from this direction by a number of degrees specified by the given direction. Calling `dir1 + dir2` is equivalent to calling `dir1.counterclockwise(dir2.toDegrees)`

## Attributes

def clockwise(degrees: Double): Direction

Returns a direction that is removed from this direction by the given number of degrees clockwise. For instance, `clockwise(90)` produces a direction at a right angle to the original.

Returns a direction that is removed from this direction by the given number of degrees clockwise. For instance, `clockwise(90)` produces a direction at a right angle to the original.

## Attributes

def counterclockwise(degrees: Double): Direction

Returns a direction that is removed from this direction by the given number of degrees counterclockwise. For instance, `counterclockwise(90)` produces a direction at a right angle to the original.

Returns a direction that is removed from this direction by the given number of degrees counterclockwise. For instance, `counterclockwise(90)` produces a direction at a right angle to the original.

## Attributes

def isDownward: Boolean

Returns `true` if this direction is a clearly downward one (with a `dy` over zero) or at least non-upward (with a `dy` of exactly zero). Only returns `false` if `dy` is less than zero.

Returns `true` if this direction is a clearly downward one (with a `dy` over zero) or at least non-upward (with a `dy` of exactly zero). Only returns `false` if `dy` is less than zero.

## Attributes

def isLeftward: Boolean

Returns `true` if this direction is a clearly leftward one (with a `dx` under zero) or at least non-rightward (with a `dx` of exactly zero). Only returns `false` if `dx` is over zero.

Returns `true` if this direction is a clearly leftward one (with a `dx` under zero) or at least non-rightward (with a `dx` of exactly zero). Only returns `false` if `dx` is over zero.

## Attributes

def isRightward: Boolean

Returns `true` if this direction is a clearly rightward one (with a `dx` over zero) or at least non-leftward (with a `dx` of exactly zero). Only returns `false` if `dx` is less than zero.

Returns `true` if this direction is a clearly rightward one (with a `dx` over zero) or at least non-leftward (with a `dx` of exactly zero). Only returns `false` if `dx` is less than zero.

## Attributes

def isUpward: Boolean

Returns `true` if this direction is a clearly upward one (with a `dy` under zero) or at least non-downward (with a `dy` of exactly zero). Only returns `false` if `dy` is over zero.

Returns `true` if this direction is a clearly upward one (with a `dy` under zero) or at least non-downward (with a `dy` of exactly zero). Only returns `false` if `dy` is over zero.

## Attributes

def opposite: Direction

Returns a direction that has the opposite `dx` and the opposite `dy` as this one.

Returns a direction that has the opposite `dx` and the opposite `dy` as this one.

## Attributes

def roughly: String

Returns a `String` description of the `Direction`; e.g., `"dx=1.00,dy=0.00"`. Uses two decimals for each coordinate.

Returns a `String` description of the `Direction`; e.g., `"dx=1.00,dy=0.00"`. Uses two decimals for each coordinate.

## Attributes

def sharesQuadrant(another: Direction): Boolean

Determines whether this direction and the given one point towards the same quarter of the unit circle. That is, determines whether the two directions’ `dx` have same sign as the other and whether their `dy`s also have the same signs. Zero values count as both positive and negative for this purpose.

Determines whether this direction and the given one point towards the same quarter of the unit circle. That is, determines whether the two directions’ `dx` have same sign as the other and whether their `dy`s also have the same signs. Zero values count as both positive and negative for this purpose.

## Attributes

def switchX: Direction

Returns a direction that has the opposite `dx` as this one and the same `dy`.

Returns a direction that has the opposite `dx` as this one and the same `dy`.

## Attributes

def switchY: Direction

Returns a direction that has the opposite `dy` as this one and the same `dx`.

Returns a direction that has the opposite `dy` as this one and the same `dx`.

## Attributes

def toDegrees: Double

Returns this direction as degrees. (Zero degrees points rightwards, positive angles are counterclockwise from there, negative ones clockwise.)

Returns this direction as degrees. (Zero degrees points rightwards, positive angles are counterclockwise from there, negative ones clockwise.)

## Attributes

def toRadians: Double

Returns this direction as radians. (Zero radians points rightwards, positive angles are counterclockwise from there, negative ones clockwise.)

Returns this direction as radians. (Zero radians points rightwards, positive angles are counterclockwise from there, negative ones clockwise.)

## Attributes

override def toString: String

Returns a `String` description of the `Direction`. The exact format varies for different direction objects.

Returns a `String` description of the `Direction`. The exact format varies for different direction objects.

## Attributes

See also

  roughly

Definition Classes
  Any

#### 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