public double Dist(PVector p) { return (this - p).Magnitude; }
public double AngleBetween(PVector p) { return Math.Acos(this.Dot(p)/p.Magnitude/this.Magnitude); }
public double Dot(PVector p) { return X * p.X + Y * p.Y + Z * p.Z; }
public PVector Cross(PVector p) { return new PVector(Z*p.Y - Y*p.Z, Z*p.Z - X*p.Z, X*p.Y - Y*p.X); }
public PVector Add(PVector p) { return new PVector(X + p.X, Y + p.Y, Z + p.Z); }
public PVector Subtract(PVector p) { return new PVector(X - p.X, Y - p.Y, Z - p.Z); }
public double AngleBetween(PVector p) { return(Math.Acos(this.Dot(p) / p.Magnitude / this.Magnitude)); }
protected double Noise(double x, double y, double z) { // http://webstaff.itn.liu.se/~stegu/TNM022-2005/perlinnoiselinks/perlin-noise-math-faq.html var pv = new PVector(x, y, z); // Find the four points around (x,y,z) double xf = Math.Floor(x); double yf = Math.Floor(y); double zf = Math.Floor(z); var points = new[] { new PVector(xf, yf, zf), new PVector(xf, yf, zf+1), new PVector(xf, yf+1, zf), new PVector(xf, yf+1, zf+1), new PVector(xf+1, yf, zf), new PVector(xf+1, yf, zf+1), new PVector(xf+1, yf+1, zf), new PVector(xf+1, yf+1, zf+1) }; var a = new double[8]; for(int i = 0; i < 8; i++) { var grad = new PVector(Random(1.0), Random(1.0)); a[i] = grad * (pv - points[i]); } throw new NotImplementedException(); }
public double Dist(PVector p) { return((this - p).Magnitude); }
public PVector Cross(PVector p) { return(new PVector(Z * p.Y - Y * p.Z, Z * p.Z - X * p.Z, X * p.Y - Y * p.X)); }
public double Dot(PVector p) { return(X * p.X + Y * p.Y + Z * p.Z); }
public PVector Subtract(PVector p) { return(new PVector(X - p.X, Y - p.Y, Z - p.Z)); }
public PVector Add(PVector p) { return(new PVector(X + p.X, Y + p.Y, Z + p.Z)); }