JavaCAD
Vector3d.java
Go to the documentation of this file.
1 
14 package eu.mihosoft.vrl.v3d.ext.quickhull3d;
15 
16 import java.util.Random;
17 
18 // TODO: Auto-generated Javadoc
27 class Vector3d
28 {
32  static private final double DOUBLE_PREC = 2.2204460492503131e-16;
33 
35  public double x;
36 
38  public double y;
39 
41  public double z;
42 
46  public Vector3d ()
47  {
48  }
49 
55  public Vector3d (Vector3d v)
56  {
57  set (v);
58  }
59 
67  public Vector3d (double x, double y, double z)
68  {
69  set (x, y, z);
70  }
71 
80  public double get (int i)
81  {
82  switch (i)
83  { case 0:
84  { return x;
85  }
86  case 1:
87  { return y;
88  }
89  case 2:
90  { return z;
91  }
92  default:
93  { throw new ArrayIndexOutOfBoundsException (i);
94  }
95  }
96  }
97 
106  public void set (int i, double value)
107  {
108  switch (i)
109  { case 0:
110  { x = value;
111  break;
112  }
113  case 1:
114  { y = value;
115  break;
116  }
117  case 2:
118  { z = value;
119  break;
120  }
121  default:
122  { throw new ArrayIndexOutOfBoundsException (i);
123  }
124  }
125  }
126 
132  public void set (Vector3d v1)
133  {
134  x = v1.x;
135  y = v1.y;
136  z = v1.z;
137  }
138 
145  public void add (Vector3d v1, Vector3d v2)
146  {
147  x = v1.x + v2.x;
148  y = v1.y + v2.y;
149  z = v1.z + v2.z;
150  }
151 
157  public void add (Vector3d v1)
158  {
159  x += v1.x;
160  y += v1.y;
161  z += v1.z;
162  }
163 
170  public void sub (Vector3d v1, Vector3d v2)
171  {
172  x = v1.x - v2.x;
173  y = v1.y - v2.y;
174  z = v1.z - v2.z;
175  }
176 
182  public void sub (Vector3d v1)
183  {
184  x -= v1.x;
185  y -= v1.y;
186  z -= v1.z;
187  }
188 
194  public void scale (double s)
195  {
196  x = s*x;
197  y = s*y;
198  z = s*z;
199  }
200 
208  public void scale (double s, Vector3d v1)
209  {
210  x = s*v1.x;
211  y = s*v1.y;
212  z = s*v1.z;
213  }
214 
221  public double norm()
222  {
223  return Math.sqrt(x*x + y*y + z*z);
224  }
225 
232  public double normSquared()
233  {
234  return x*x + y*y + z*z;
235  }
236 
243  public double distance(Vector3d v)
244  {
245  double dx = x - v.x;
246  double dy = y - v.y;
247  double dz = z - v.z;
248 
249  return Math.sqrt (dx*dx + dy*dy + dz*dz);
250  }
251 
259  public double distanceSquared(Vector3d v)
260  {
261  double dx = x - v.x;
262  double dy = y - v.y;
263  double dz = z - v.z;
264 
265  return (dx*dx + dy*dy + dz*dz);
266  }
267 
274  public double dot (Vector3d v1)
275  {
276  return x*v1.x + y*v1.y + z*v1.z;
277  }
278 
282  public void normalize()
283  {
284  double lenSqr = x*x + y*y + z*z;
285  double err = lenSqr - 1;
286  if (err > (2*DOUBLE_PREC) ||
287  err < -(2*DOUBLE_PREC))
288  { double len = Math.sqrt(lenSqr);
289  x /= len;
290  y /= len;
291  z /= len;
292  }
293  }
294 
298  public void setZero()
299  {
300  x = 0;
301  y = 0;
302  z = 0;
303  }
304 
312  public void set (double x, double y, double z)
313  {
314  this.x = x;
315  this.y = y;
316  this.z = z;
317  }
318 
326  public void cross (Vector3d v1, Vector3d v2)
327  {
328  double tmpx = v1.y*v2.z - v1.z*v2.y;
329  double tmpy = v1.z*v2.x - v1.x*v2.z;
330  double tmpz = v1.x*v2.y - v1.y*v2.x;
331 
332  x = tmpx;
333  y = tmpy;
334  z = tmpz;
335  }
336 
346  protected void setRandom (double lower, double upper, Random generator)
347  {
348  double range = upper-lower;
349 
350  x = generator.nextDouble()*range + lower;
351  y = generator.nextDouble()*range + lower;
352  z = generator.nextDouble()*range + lower;
353  }
354 
361  public String toString()
362  {
363  return x + " " + y + " " + z;
364  }
365 }