Most Processing folks use a
PVector merely as a mean to store 2 or 3 values and nothing more.
Here's a mini
PVectorD storage
class which only stores and retrieves its
x,
y,
z fields.
It accepts a wide range of data types; including
Array,
PVector,
int and
float:
P.S.: Suffix all your numerical literals w/
d, like
4.5d to assure a better precision.
Processing's pre-processor suffix all fractional literals w/
f, forcing them to be
float instead.
PVectorD.java:
/**
* Mini PVector Class Storage for Doubles (v1.01)
* by GoToLoop (2013/Aug)
*
* http://forum.processing.org/topic/can-pvector-work-with-doubles
*/
class PVectorD {
double x, y, z;
PVectorD(double xx, double yy) {
set(xx, yy);
}
PVectorD(double xx, double yy, double zz) {
set(xx, yy, zz);
}
PVectorD(PVector p) {
set(p);
}
PVectorD(int[] a) {
set(float(a));
}
PVectorD(float[] a) {
set(a);
}
PVectorD(double[] a) {
set(a);
}
void clear() {
x = y = z = 0;
}
void set(double xx, double yy) {
x = xx;
y = yy;
}
void set(double xx, double yy, double zz) {
x = xx;
y = yy;
z = zz;
}
void set(PVector p) {
x = p.x;
y = p.y;
z = p.z;
}
void set(int[] a) {
set(float(a));
}
void set(float[] a) {
final int len = a.length;
if (len > 0) x = a[0];
if (len > 1) y = a[1];
if (len > 2) z = a[2];
}
void set(double[] a) {
final int len = a.length;
if (len > 0) x = a[0];
if (len > 1) y = a[1];
if (len > 2) z = a[2];
}
PVectorD get() {
return new PVectorD(x, y, z);
}
PVector toPVector() {
return new PVector((float) x, (float) y, (float) z);
}
double[] toArray() {
return new double[] {
x, y, z
};
}
String toString() {
return "[ " + x + ", " + y + ", " + z + " ]";
}
}