package jo.vecmath.logic;
import java.util.StringTokenizer;
import jo.sm.logic.utils.FloatUtils;
import jo.vecmath.Matrix4f;
import jo.vecmath.Point3f;
public class Point3fLogic extends Tuple3fLogic {
public static void rotateBy(Point3f v, float x, float y, float z) {
Matrix4f m = Matrix4fLogic.makeRotateMatrix(x, y, z);
m.transform(v);
}
public static Point3f rotateNew(Point3f vOrig, float x, float y, float z) {
Point3f v = new Point3f(vOrig);
rotateBy(v, x, y, z);
return v;
}
public static Point3f interpolate(Point3f t1, Point3f t2, float alpha) {
Point3f v = new Point3f();
v.interpolate(t1, t2, alpha);
return v;
}
public static Point3f add(Point3f a, Point3f b) {
Point3f ret = new Point3f();
ret.add(a, b);
return ret;
}
public static Point3f sub(Point3f a, Point3f b) {
Point3f ret = new Point3f();
ret.sub(a, b);
return ret;
}
public static Point3f scale(Point3f v, float m) {
Point3f ret = new Point3f(v);
ret.scale(m);
return ret;
}
public static Point3f scale(Point3f v, Point3f s) {
Point3f ret = new Point3f(v);
ret.x *= s.x;
ret.y *= s.y;
ret.z *= s.z;
return ret;
}
public static Point3f cross(Point3f a, Point3f b) {
Point3f ret = new Point3f();
float x = a.y * b.z - a.z * b.y;
float y = b.x * a.z - b.z * a.x;
ret.z = a.x * b.y - a.y * b.x;
ret.x = x;
ret.y = y;
return ret;
}
public static boolean equals(Point3f a, Point3f b) {
return isZero(a.distance(b));
}
public static Point3f fromString(String txt) {
StringTokenizer st = new StringTokenizer(txt, ", ");
if (st.countTokens() != 3) {
throw new IllegalArgumentException("Expected three values: '" + txt + "', got " + st.countTokens());
}
Point3f p = new Point3f();
p.x = FloatUtils.parseFloat(st.nextToken());
p.y = FloatUtils.parseFloat(st.nextToken());
p.z = FloatUtils.parseFloat(st.nextToken());
return p;
}
public static Point3f abs(Point3f p1) {
Point3f p2 = new Point3f((float) Math.abs(p1.x), (float) Math.abs(p1.y), (float) Math.abs(p1.z));
return p2;
}
public static Point3f ceil(Point3f p1) {
Point3f p2 = new Point3f((float) Math.ceil(p1.x), (float) Math.ceil(p1.y), (float) Math.ceil(p1.z));
return p2;
}
public static Point3f floor(Point3f p1) {
Point3f p2 = new Point3f((float) Math.floor(p1.x), (float) Math.floor(p1.y), (float) Math.floor(p1.z));
return p2;
}
}