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 than 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)
andDirection.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.*
.
- Value 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
- Companion:
- object
Value members
Concrete methods
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)
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.
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.
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.
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.
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.
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.
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.
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.
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
.
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
.
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.)