public class Physics extends Object
For the purposes of this package, we represent the state of an object as a four-element double[] containing [x, y, vx, vy]: the coordinates of the object's center, and the x- and y-components of its velocity.
The vector-manipulating routines add, len2, len, and ip operate on 2-element segments of arrays of doubles. To specify such a segment, you supply an array and the index of the first element of the segment. Thus, if A, V, and C are 4-element arrays, then add (C, 0, A, 0, t, V, 2) adds (A[0], A[1]) + t * (V[2], V[3]) and places the result in C[0], C[1]. In comments, we use the notation X[i:i+1] to refer to one of these two-element segments.
The computations are not exactly physical (especially when the objects interpenetrate slightly due to round-off), but they should do for this project.
Constructor and Description |
---|
Physics() |
Modifier and Type | Method and Description |
---|---|
static double[] |
add(double[] Z,
int iz,
double[] X,
int ix,
double[] Y,
int iy)
Same as add (Z, IZ, 1.0, X, IX, 1.0, Y, IY).
|
static double[] |
add(double[] Z,
int iz,
double[] X,
int ix,
double ay,
double[] Y,
int iy)
Same as add (Z, IZ, 1.0, X, IX, AY, Y, IY).
|
static double[] |
add(double[] X,
int ix,
double ay,
double[] Y,
int iy)
Same as add (NZ, 0, 1.0, X, IX, AY, Y, IY), where NZ is a new
double[2].
|
static double[] |
add(double[] Z,
int iz,
double ax,
double[] X,
int ix,
double ay,
double[] Y,
int iy)
Set Z[IZ : IZ+1] to AX*X[IX : IX+1] + AY*Y[IY : IY+1], returning
Z.
|
static double[] |
add(double ax,
double[] X,
int ix,
double ay,
double[] Y,
int iy)
Same as add (NZ, 0, AX, X, IX, AY, Y, IY), where NZ is a new
double[2].
|
static double |
collide(double[] p0,
double[] p1,
double r)
Given two objects with radius R with states P0 and P1 (see the
class documentation for ucb.proj2.Physics, above), compute
the time at which they next collide, assuming that initially,
they are separated by a distance of >= 2R.
|
static double |
ip(double[] X,
int ix,
double[] Y,
int iy)
The inner product X[IX] * Y[IY] + X[IX+1] * Y[IY+1].
|
static double |
len(double[] X,
int ix)
The length of X[IX : IX+1]
|
static double |
len(double[] X,
int ix,
double[] Y,
int iy)
The length of X[IX : IX+1] - Y[IY : IY+1].
|
static double |
len2(double[] X,
int ix)
The squared length of X[IX : IX+1].
|
static double |
len2(double[] X,
int ix,
double[] Y,
int iy)
The squared length of X[IX : IX+1] - Y[IY : IY+1].
|
static void |
rebound(double[] p0,
double[] p1)
Given two objects with P0 and P1 (see the class documentation for
ucb.proj2.Physics, above) that are in collision with each other,
(destructively) modify their velocities as a result of that
collision.
|
public static double collide(double[] p0, double[] p1, double r)
public static void rebound(double[] p0, double[] p1)
public static double[] add(double[] Z, int iz, double ax, double[] X, int ix, double ay, double[] Y, int iy)
public static double[] add(double[] Z, int iz, double[] X, int ix, double[] Y, int iy)
public static double[] add(double[] Z, int iz, double[] X, int ix, double ay, double[] Y, int iy)
public static double[] add(double ax, double[] X, int ix, double ay, double[] Y, int iy)
public static double[] add(double[] X, int ix, double ay, double[] Y, int iy)
public static double ip(double[] X, int ix, double[] Y, int iy)
public static double len2(double[] X, int ix)
public static double len(double[] X, int ix)
public static double len2(double[] X, int ix, double[] Y, int iy)
public static double len(double[] X, int ix, double[] Y, int iy)