Package com.sun.j3d.internal

Source Code of com.sun.j3d.internal.Distance

/*     */ package com.sun.j3d.internal;
/*     */
/*     */ import javax.vecmath.Point3d;
/*     */ import javax.vecmath.Vector3d;
/*     */
/*     */ public class Distance
/*     */ {
/*     */   static final double FUZZ = 1.E-005D;
/*     */
/*     */   private static final double DIST(double in)
/*     */   {
/*  48 */     return Math.abs(in);
/*     */   }
/*     */
/*     */   public static double rayToSegment(Point3d rayorig, Vector3d raydir, Point3d segstart, Point3d segend)
/*     */   {
/*  62 */     return rayToSegment(rayorig, raydir, segstart, segend, null, null, null);
/*     */   }
/*     */
/*     */   public static double rayToSegment(Point3d rayorig, Vector3d raydir, Point3d segstart, Point3d segend, Point3d rayint, Point3d segint, double[] param)
/*     */   {
/*  84 */     Vector3d diff = new Vector3d();
/*  85 */     diff.sub(rayorig, segstart);
/*  86 */     Vector3d segdir = new Vector3d();
/*  87 */     segdir.sub(segend, segstart);
/*     */
/*  92 */     double A = raydir.dot(raydir);
/*  93 */     double B = -raydir.dot(segdir);
/*  94 */     double C = segdir.dot(segdir);
/*  95 */     double D = raydir.dot(diff);
/*     */
/*  97 */     double F = diff.dot(diff);
/*  98 */     double det = Math.abs(A * C - B * B);
/*     */
/* 102 */     if (det >= 1.E-005D)
/*     */     {
/* 104 */       double E = -segdir.dot(diff);
/* 105 */       double s = B * E - C * D;
/* 106 */       double t = B * D - A * E;
/*     */
/* 108 */       if (s >= 0.0D) {
/* 109 */         if (t >= 0.0D) {
/* 110 */           if (t <= det)
/*     */           {
/* 112 */             double invDet = 1.0D / det;
/* 113 */             s *= invDet;
/* 114 */             t *= invDet;
/* 115 */             if (rayint != null) rayint.scaleAdd(s, raydir, rayorig);
/* 116 */             if (segint != null) segint.scaleAdd(t, segdir, segstart);
/* 117 */             if (param != null) { param[0] = s; param[1] = t; }
/* 118 */             return DIST(s * (A * s + B * t + 2.0D * D) + t * (B * s + C * t + 2.0D * E) + F);
/*     */           }
/*     */
/* 122 */           t = 1.0D;
/* 123 */           if (D >= 0.0D) {
/* 124 */             s = 0.0D;
/* 125 */             if (rayint != null) rayint.set(rayorig);
/* 126 */             if (segint != null) segint.set(segend);
/* 127 */             if (param != null) { param[0] = s; param[1] = t; }
/* 128 */             return DIST(C + 2.0D * E + F);
/*     */           }
/*     */
/* 131 */           s = -D / A;
/* 132 */           if (rayint != null) rayint.scaleAdd(s, raydir, rayorig);
/* 133 */           if (segint != null) segint.set(segend);
/* 134 */           if (param != null) { param[0] = s; param[1] = t; }
/* 135 */           return DIST((D + 2.0D * B) * s + C + 2.0D * E + F);
/*     */         }
/*     */
/* 140 */         t = 0.0D;
/* 141 */         if (D >= 0.0D) {
/* 142 */           s = 0.0D;
/* 143 */           if (rayint != null) rayint.set(rayorig);
/* 144 */           if (segint != null) segint.set(segstart);
/* 145 */           if (param != null) { param[0] = s; param[1] = t; }
/* 146 */           return DIST(F);
/*     */         }
/*     */
/* 149 */         s = -D / A;
/* 150 */         if (rayint != null) rayint.scaleAdd(s, raydir, rayorig);
/* 151 */         if (segint != null) segint.set(segstart);
/* 152 */         if (param != null) { param[0] = s; param[1] = t; }
/* 153 */         return DIST(D * s + F);
/*     */       }
/*     */
/* 158 */       if (t <= 0.0D) {
/* 159 */         if (D < 0.0D) {
/* 160 */           s = -D / A;
/* 161 */           t = 0.0D;
/* 162 */           if (rayint != null) rayint.scaleAdd(s, raydir, rayorig);
/* 163 */           if (segint != null) segint.set(segstart);
/* 164 */           if (param != null) { param[0] = s; param[1] = t; }
/* 165 */           return DIST(D * s + F);
/*     */         }
/*     */
/* 168 */         s = 0.0D;
/* 169 */         if (E >= 0.0D) {
/* 170 */           t = 0.0D;
/* 171 */           if (rayint != null) rayint.set(rayorig);
/* 172 */           if (segint != null) segint.set(segstart);
/* 173 */           if (param != null) { param[0] = s; param[1] = t; }
/* 174 */           return DIST(F);
/*     */         }
/* 176 */         if (-E >= C) {
/* 177 */           t = 1.0D;
/* 178 */           if (rayint != null) rayint.set(rayorig);
/* 179 */           if (segint != null) segint.set(segend);
/* 180 */           if (param != null) { param[0] = s; param[1] = t; }
/* 181 */           return DIST(C + 2.0D * E + F);
/*     */         }
/*     */
/* 184 */         t = -E / C;
/* 185 */         if (rayint != null) rayint.set(rayorig);
/* 186 */         if (segint != null) segint.scaleAdd(t, segdir, segstart);
/* 187 */         if (param != null) { param[0] = s; param[1] = t; }
/* 188 */         return DIST(E * t + F);
/*     */       }
/*     */
/* 192 */       if (t <= det) {
/* 193 */         s = 0.0D;
/* 194 */         if (E >= 0.0D) {
/* 195 */           t = 0.0D;
/* 196 */           if (rayint != null) rayint.set(rayorig);
/* 197 */           if (segint != null) segint.set(segstart);
/* 198 */           if (param != null) { param[0] = s; param[1] = t; }
/* 199 */           return DIST(F);
/*     */         }
/* 201 */         if (-E >= C) {
/* 202 */           t = 1.0D;
/* 203 */           if (rayint != null) rayint.set(rayorig);
/* 204 */           if (segint != null) segint.set(segend);
/* 205 */           if (param != null) { param[0] = s; param[1] = t; }
/* 206 */           return DIST(C + 2.0D * E + F);
/*     */         }
/*     */
/* 209 */         t = -E / C;
/* 210 */         if (rayint != null) rayint.set(rayorig);
/* 211 */         if (segint != null) segint.scaleAdd(t, segdir, segstart);
/* 212 */         if (param != null) { param[0] = s; param[1] = t; }
/* 213 */         return DIST(E * t + F);
/*     */       }
/*     */
/* 217 */       double tmp = B + D;
/* 218 */       if (tmp < 0.0D) {
/* 219 */         s = -tmp / A;
/* 220 */         t = 1.0D;
/* 221 */         if (rayint != null) rayint.scaleAdd(s, raydir, rayorig);
/* 222 */         if (segint != null) segint.set(segend);
/* 223 */         if (param != null) { param[0] = s; param[1] = t; }
/* 224 */         return DIST(tmp * s + C + 2.0D * E + F);
/*     */       }
/*     */
/* 227 */       s = 0.0D;
/* 228 */       if (E >= 0.0D) {
/* 229 */         t = 0.0D;
/* 230 */         if (rayint != null) rayint.set(rayorig);
/* 231 */         if (segint != null) segint.set(segstart);
/* 232 */         if (param != null) { param[0] = s; param[1] = t; }
/* 233 */         return DIST(F);
/*     */       }
/* 235 */       if (-E >= C) {
/* 236 */         t = 1.0D;
/* 237 */         if (rayint != null) rayint.set(rayorig);
/* 238 */         if (segint != null) segint.set(segend);
/* 239 */         if (param != null) { param[0] = s; param[1] = t; }
/* 240 */         return DIST(C + 2.0D * E + F);
/*     */       }
/*     */
/* 243 */       t = -E / C;
/* 244 */       if (rayint != null) rayint.set(rayorig);
/* 245 */       if (segint != null) segint.scaleAdd(t, segdir, segstart);
/* 246 */       if (param != null) { param[0] = s; param[1] = t; }
/* 247 */       return DIST(E * t + F);
/*     */     }
/*     */
/* 255 */     if (B > 0.0D)
/*     */     {
/* 257 */       double t = 0.0D;
/* 258 */       if (D >= 0.0D) {
/* 259 */         double s = 0.0D;
/* 260 */         if (rayint != null) rayint.set(rayorig);
/* 261 */         if (segint != null) segint.set(segstart);
/* 262 */         if (param != null) { param[0] = s; param[1] = t; }
/* 263 */         return DIST(F);
/*     */       }
/*     */
/* 266 */       double s = -D / A;
/* 267 */       if (rayint != null) rayint.scaleAdd(s, raydir, rayorig);
/* 268 */       if (segint != null) segint.set(segstart);
/* 269 */       if (param != null) { param[0] = s; param[1] = t; }
/* 270 */       return DIST(D * s + F);
/*     */     }
/*     */
/* 275 */     double E = segdir.dot(diff);
/* 276 */     double t = 1.0D;
/* 277 */     double tmp = B + D;
/* 278 */     if (tmp >= 0.0D) {
/* 279 */       double s = 0.0D;
/* 280 */       if (rayint != null) rayint.set(rayorig);
/* 281 */       if (segint != null) segint.set(segend);
/* 282 */       if (param != null) { param[0] = s; param[1] = t; }
/* 283 */       return DIST(C + 2.0D * E + F);
/*     */     }
/*     */
/* 286 */     double s = -tmp / A;
/* 287 */     if (rayint != null) rayint.scaleAdd(s, raydir, rayorig);
/* 288 */     if (segint != null) segint.set(segend);
/* 289 */     if (param != null) { param[0] = s; param[1] = t; }
/* 290 */     return DIST(tmp * s + C + 2.0D * E + F);
/*     */   }
/*     */
/*     */   public static double rayToRay(Point3d ray0orig, Vector3d ray0dir, Point3d ray1orig, Vector3d ray1dir)
/*     */   {
/* 307 */     return rayToRay(ray0orig, ray0dir, ray1orig, ray1dir, null, null, null);
/*     */   }
/*     */
/*     */   public static double rayToRay(Point3d ray0orig, Vector3d ray0dir, Point3d ray1orig, Vector3d ray1dir, Point3d ray0int, Point3d ray1int, double[] param)
/*     */   {
/* 330 */     Vector3d diff = new Vector3d();
/* 331 */     diff.sub(ray0orig, ray1orig);
/*     */
/* 333 */     double A = ray0dir.dot(ray0dir);
/* 334 */     double B = -ray0dir.dot(ray1dir);
/* 335 */     double C = ray1dir.dot(ray1dir);
/* 336 */     double D = ray0dir.dot(diff);
/*     */
/* 338 */     double F = diff.dot(diff);
/* 339 */     double det = Math.abs(A * C - B * B);
/*     */
/* 345 */     if (det >= 1.E-005D)
/*     */     {
/* 347 */       double E = -ray1dir.dot(diff);
/* 348 */       double s = B * E - C * D;
/* 349 */       double t = B * D - A * E;
/*     */
/* 351 */       if (s >= 0.0D) {
/* 352 */         if (t >= 0.0D)
/*     */         {
/* 354 */           double invDet = 1.0D / det;
/* 355 */           s *= invDet;
/* 356 */           t *= invDet;
/* 357 */           if (ray0int != null) ray0int.scaleAdd(s, ray0dir, ray0orig);
/* 358 */           if (ray1int != null) ray1int.scaleAdd(t, ray1dir, ray1orig);
/* 359 */           if (param != null) { param[0] = s; param[1] = t; }
/* 360 */           return DIST(s * (A * s + B * t + 2.0D * D) + t * (B * s + C * t + 2.0D * E) + F);
/*     */         }
/*     */
/* 363 */         t = 0.0D;
/* 364 */         if (D >= 0.0D) {
/* 365 */           s = 0.0D;
/* 366 */           if (ray0int != null) ray0int.set(ray0orig);
/* 367 */           if (ray1int != null) ray1int.set(ray1orig);
/* 368 */           if (param != null) { param[0] = s; param[1] = t; }
/* 369 */           return DIST(F);
/*     */         }
/*     */
/* 372 */         s = -D / A;
/* 373 */         if (ray0int != null) ray0int.scaleAdd(s, ray0dir, ray0orig);
/* 374 */         if (ray1int != null) ray1int.set(ray1orig);
/* 375 */         if (param != null) { param[0] = s; param[1] = t; }
/* 376 */         return DIST(D * s + F);
/*     */       }
/*     */
/* 381 */       if (t >= 0.0D) {
/* 382 */         s = 0.0D;
/* 383 */         if (E >= 0.0D) {
/* 384 */           t = 0.0D;
/* 385 */           if (ray0int != null) ray0int.set(ray0orig);
/* 386 */           if (ray1int != null) ray1int.set(ray1orig);
/* 387 */           if (param != null) { param[0] = s; param[1] = t; }
/* 388 */           return DIST(F);
/*     */         }
/*     */
/* 391 */         t = -E / C;
/* 392 */         if (ray0int != null) ray0int.set(ray0orig);
/* 393 */         if (ray1int != null) ray1int.scaleAdd(t, ray1dir, ray1orig);
/* 394 */         if (param != null) { param[0] = s; param[1] = t; }
/* 395 */         return DIST(E * t + F);
/*     */       }
/*     */
/* 399 */       if (D < 0.0D) {
/* 400 */         s = -D / A;
/* 401 */         t = 0.0D;
/* 402 */         if (ray0int != null) ray0int.scaleAdd(s, ray0dir, ray0orig);
/* 403 */         if (ray1int != null) ray1int.set(ray1orig);
/* 404 */         if (param != null) { param[0] = s; param[1] = t; }
/* 405 */         return DIST(D * s + F);
/*     */       }
/*     */
/* 408 */       s = 0.0D;
/* 409 */       if (E >= 0.0D) {
/* 410 */         t = 0.0D;
/* 411 */         if (ray0int != null) ray0int.set(ray0orig);
/* 412 */         if (ray1int != null) ray1int.set(ray1orig);
/* 413 */         if (param != null) { param[0] = s; param[1] = t; }
/* 414 */         return DIST(F);
/*     */       }
/*     */
/* 417 */       t = -E / C;
/* 418 */       if (ray0int != null) ray0int.set(ray0orig);
/* 419 */       if (ray1int != null) ray1int.scaleAdd(t, ray1dir, ray1orig);
/* 420 */       if (param != null) { param[0] = s; param[1] = t; }
/* 421 */       return DIST(E * t + F);
/*     */     }
/*     */
/* 429 */     if (B > 0.0D)
/*     */     {
/* 431 */       double t = 0.0D;
/* 432 */       if (D >= 0.0D) {
/* 433 */         double s = 0.0D;
/* 434 */         if (ray0int != null) ray0int.set(ray0orig);
/* 435 */         if (ray1int != null) ray1int.set(ray1orig);
/* 436 */         if (param != null) { param[0] = s; param[1] = t; }
/* 437 */         return DIST(F);
/*     */       }
/*     */
/* 440 */       double s = -D / A;
/* 441 */       if (ray0int != null) ray0int.scaleAdd(s, ray0dir, ray0orig);
/* 442 */       if (ray1int != null) ray1int.set(ray1orig);
/* 443 */       if (param != null) { param[0] = s; param[1] = t; }
/* 444 */       return DIST(D * s + F);
/*     */     }
/*     */
/* 449 */     if (D >= 0.0D) {
/* 450 */       double E = ray1dir.dot(diff);
/* 451 */       double s = 0.0D;
/* 452 */       double t = -E / C;
/* 453 */       if (ray0int != null) ray0int.set(ray0orig);
/* 454 */       if (ray1int != null) ray1int.scaleAdd(t, ray1dir, ray1orig);
/* 455 */       if (param != null) { param[0] = s; param[1] = t; }
/* 456 */       return DIST(E * t + F);
/*     */     }
/*     */
/* 459 */     double s = -D / A;
/* 460 */     double t = 0.0D;
/* 461 */     if (ray0int != null) ray0int.scaleAdd(s, ray0dir, ray0orig);
/* 462 */     if (ray1int != null) ray1int.set(ray1orig);
/* 463 */     if (param != null) { param[0] = s; param[1] = t; }
/* 464 */     return DIST(D * s + F);
/*     */   }
/*     */
/*     */   public static double pointToRay(Point3d pt, Point3d rayorig, Vector3d raydir)
/*     */   {
/* 479 */     return pointToRay(pt, rayorig, raydir, null, null);
/*     */   }
/*     */
/*     */   public static double pointToRay(Point3d pt, Point3d rayorig, Vector3d raydir, Point3d rayint, double[] param)
/*     */   {
/* 497 */     Vector3d diff = new Vector3d();
/* 498 */     diff.sub(pt, rayorig);
/* 499 */     double t = raydir.dot(diff);
/*     */
/* 501 */     if (t <= 0.0D) {
/* 502 */       t = 0.0D;
/* 503 */       if (rayint != null) rayint.set(rayorig);
/* 504 */       if (param != null) param[0] = t;
/*     */     }
/* 506 */     else { t /= raydir.dot(raydir);
/* 507 */       diff.scaleAdd(-t, raydir, diff);
/* 508 */       if (rayint != null) rayint.scaleAdd(t, raydir, rayorig);
/* 509 */       if (param != null) param[0] = t;
/*     */     }
/* 511 */     return diff.dot(diff);
/*     */   }
/*     */
/*     */   public static double pointToSegment(Point3d pt, Point3d segstart, Point3d segend)
/*     */   {
/* 519 */     return pointToSegment(pt, segstart, segend, null, null);
/*     */   }
/*     */
/*     */   public static double pointToSegment(Point3d pt, Point3d segstart, Point3d segend, Point3d segint, double[] param)
/*     */   {
/* 531 */     Vector3d segdir = new Vector3d();
/* 532 */     segdir.sub(segend, segstart);
/* 533 */     Vector3d diff = new Vector3d();
/* 534 */     diff.sub(pt, segstart);
/* 535 */     double t = segdir.dot(diff);
/*     */
/* 537 */     if (t <= 0.0D) {
/* 538 */       t = 0.0D;
/* 539 */       if (segint != null) segint.set(segstart);
/* 540 */       if (param != null) param[0] = t;
/*     */     }
/*     */     else
/*     */     {
/* 543 */       double mDotm = segdir.dot(segdir);
/* 544 */       if (t >= mDotm) {
/* 545 */         t = 1.0D;
/* 546 */         diff.sub(segdir);
/* 547 */         if (segint != null) segint.set(segend);
/* 548 */         if (param != null) param[0] = t;
/*     */       }
/*     */       else
/*     */       {
/* 551 */         t /= mDotm;
/* 552 */         diff.scaleAdd(-t, segdir, diff);
/* 553 */         if (segint != null) segint.scaleAdd(t, segdir, segstart);
/* 554 */         if (param != null) param[0] = t;
/*     */       }
/*     */     }
/* 557 */     return diff.dot(diff);
/*     */   }
/*     */
/*     */   public static double segmentToSegment(Point3d seg0start, Point3d seg0end, Point3d seg1start, Point3d seg1end)
/*     */   {
/* 572 */     return segmentToSegment(seg0start, seg0end, seg1start, seg1end, null, null, null);
/*     */   }
/*     */
/*     */   public static double segmentToSegment(Point3d seg0start, Point3d seg0end, Point3d seg1start, Point3d seg1end, Point3d seg0int, Point3d seg1int, double[] param)
/*     */   {
/* 595 */     Vector3d diff = new Vector3d();
/* 596 */     diff.sub(seg0start, seg1start);
/*     */
/* 598 */     Vector3d seg0dir = new Vector3d();
/* 599 */     seg0dir.sub(seg0end, seg0start);
/* 600 */     Vector3d seg1dir = new Vector3d();
/* 601 */     seg1dir.sub(seg1end, seg1start);
/*     */
/* 603 */     double A = seg0dir.dot(seg0dir);
/* 604 */     double B = -seg0dir.dot(seg1dir);
/* 605 */     double C = seg1dir.dot(seg1dir);
/* 606 */     double D = seg0dir.dot(diff);
/*     */
/* 608 */     double F = diff.dot(diff);
/* 609 */     double det = Math.abs(A * C - B * B);
/*     */
/* 613 */     if (det >= 1.E-005D)
/*     */     {
/* 615 */       double E = -seg1dir.dot(diff);
/* 616 */       double s = B * E - C * D;
/* 617 */       double t = B * D - A * E;
/*     */
/* 619 */       if (s >= 0.0D) {
/* 620 */         if (s <= det) {
/* 621 */           if (t >= 0.0D) {
/* 622 */             if (t <= det)
/*     */             {
/* 624 */               double invDet = 1.0D / det;
/* 625 */               s *= invDet;
/* 626 */               t *= invDet;
/* 627 */               if (seg0int != null) seg0int.scaleAdd(s, seg0dir, seg0start);
/* 628 */               if (seg1int != null) seg1int.scaleAdd(t, seg1dir, seg1start);
/* 629 */               if (param != null) { param[0] = s; param[1] = t; }
/* 630 */               return DIST(s * (A * s + B * t + 2.0D * D) + t * (B * s + C * t + 2.0D * E) + F);
/*     */             }
/*     */
/* 633 */             t = 1.0D;
/* 634 */             double tmp = B + D;
/* 635 */             if (tmp >= 0.0D) {
/* 636 */               s = 0.0D;
/* 637 */               if (seg0int != null) seg0int.set(seg0start);
/* 638 */               if (seg1int != null) seg1int.set(seg1end);
/* 639 */               if (param != null) { param[0] = s; param[1] = t; }
/* 640 */               return DIST(C + 2.0D * E + F);
/*     */             }
/* 642 */             if (-tmp >= A) {
/* 643 */               s = 1.0D;
/* 644 */               if (seg0int != null) seg0int.set(seg0end);
/* 645 */               if (seg1int != null) seg1int.set(seg1end);
/* 646 */               if (param != null) { param[0] = s; param[1] = t; }
/* 647 */               return DIST(A + C + F + 2.0D * (E + tmp));
/*     */             }
/*     */
/* 650 */             s = -tmp / A;
/* 651 */             if (seg0int != null) seg0int.scaleAdd(s, seg0dir, seg0start);
/* 652 */             if (seg1int != null) seg1int.set(seg1end);
/* 653 */             if (param != null) { param[0] = s; param[1] = t; }
/* 654 */             return DIST(tmp * s + C + 2.0D * E + F);
/*     */           }
/*     */
/* 659 */           t = 0.0D;
/* 660 */           if (D >= 0.0D) {
/* 661 */             s = 0.0D;
/* 662 */             if (seg0int != null) seg0int.set(seg0start);
/* 663 */             if (seg1int != null) seg1int.set(seg1start);
/* 664 */             if (param != null) { param[0] = s; param[1] = t; }
/* 665 */             return DIST(F);
/*     */           }
/* 667 */           if (-D >= A) {
/* 668 */             s = 1.0D;
/* 669 */             if (seg0int != null) seg0int.set(seg0end);
/* 670 */             if (seg1int != null) seg1int.set(seg1start);
/* 671 */             if (param != null) { param[0] = s; param[1] = t; }
/* 672 */             return DIST(A + 2.0D * D + F);
/*     */           }
/*     */
/* 675 */           s = -D / A;
/* 676 */           if (seg0int != null) seg0int.scaleAdd(s, seg0dir, seg0start);
/* 677 */           if (seg1int != null) seg1int.set(seg1start);
/* 678 */           if (param != null) { param[0] = s; param[1] = t; }
/* 679 */           return DIST(D * s + F);
/*     */         }
/*     */
/* 684 */         if (t >= 0.0D) {
/* 685 */           if (t <= det) {
/* 686 */             s = 1.0D;
/* 687 */             double tmp = B + E;
/* 688 */             if (tmp >= 0.0D) {
/* 689 */               t = 0.0D;
/* 690 */               if (seg0int != null) seg0int.set(seg0end);
/* 691 */               if (seg1int != null) seg1int.set(seg1start);
/* 692 */               if (param != null) { param[0] = s; param[1] = t; }
/* 693 */               return DIST(A + 2.0D * D + F);
/*     */             }
/* 695 */             if (-tmp >= C) {
/* 696 */               t = 1.0D;
/* 697 */               if (seg0int != null) seg0int.set(seg0end);
/* 698 */               if (seg1int != null) seg1int.set(seg1end);
/* 699 */               if (param != null) { param[0] = s; param[1] = t; }
/* 700 */               return DIST(A + C + F + 2.0D * (D + tmp));
/*     */             }
/*     */
/* 703 */             t = -tmp / C;
/* 704 */             if (seg0int != null) seg0int.set(seg0end);
/* 705 */             if (seg1int != null) seg1int.scaleAdd(t, seg1dir, seg1start);
/* 706 */             if (param != null) { param[0] = s; param[1] = t; }
/* 707 */             return DIST(tmp * t + A + 2.0D * D + F);
/*     */           }
/*     */
/* 711 */           double tmp = B + D;
/* 712 */           if (-tmp <= A) {
/* 713 */             t = 1.0D;
/* 714 */             if (tmp >= 0.0D) {
/* 715 */               s = 0.0D;
/* 716 */               if (seg0int != null) seg0int.set(seg0start);
/* 717 */               if (seg1int != null) seg1int.set(seg1end);
/* 718 */               if (param != null) { param[0] = s; param[1] = t; }
/* 719 */               return DIST(C + 2.0D * E + F);
/*     */             }
/*     */
/* 722 */             s = -tmp / A;
/* 723 */             if (seg0int != null) seg0int.scaleAdd(s, seg0dir, seg0start);
/* 724 */             if (seg1int != null) seg1int.set(seg1end);
/* 725 */             if (param != null) { param[0] = s; param[1] = t; }
/* 726 */             return DIST(tmp * s + C + 2.0D * E + F);
/*     */           }
/*     */
/* 730 */           s = 1.0D;
/* 731 */           tmp = B + E;
/* 732 */           if (tmp >= 0.0D) {
/* 733 */             t = 0.0D;
/* 734 */             if (seg0int != null) seg0int.set(seg0end);
/* 735 */             if (seg1int != null) seg1int.set(seg1start);
/* 736 */             if (param != null) { param[0] = s; param[1] = t; }
/* 737 */             return DIST(A + 2.0D * D + F);
/*     */           }
/* 739 */           if (-tmp >= C) {
/* 740 */             t = 1.0D;
/* 741 */             if (seg0int != null) seg0int.set(seg0end);
/* 742 */             if (seg1int != null) seg1int.set(seg1end);
/* 743 */             if (param != null) { param[0] = s; param[1] = t; }
/* 744 */             return DIST(A + C + F + 2.0D * (D + tmp));
/*     */           }
/*     */
/* 747 */           t = -tmp / C;
/* 748 */           if (seg0int != null) seg0int.set(seg0end);
/* 749 */           if (seg1int != null) seg1int.scaleAdd(t, seg1dir, seg1start);
/* 750 */           if (param != null) { param[0] = s; param[1] = t; }
/* 751 */           return DIST(tmp * t + A + 2.0D * D + F);
/*     */         }
/*     */
/* 757 */         if (-D < A) {
/* 758 */           t = 0.0D;
/* 759 */           if (D >= 0.0D) {
/* 760 */             s = 0.0D;
/* 761 */             if (seg0int != null) seg0int.set(seg0start);
/* 762 */             if (seg1int != null) seg1int.set(seg1start);
/* 763 */             if (param != null) { param[0] = s; param[1] = t; }
/* 764 */             return DIST(F);
/*     */           }
/*     */
/* 767 */           s = -D / A;
/* 768 */           if (seg0int != null) seg0int.scaleAdd(s, seg0dir, seg0start);
/* 769 */           if (seg1int != null) seg1int.set(seg1start);
/* 770 */           if (param != null) { param[0] = s; param[1] = t; }
/* 771 */           return DIST(D * s + F);
/*     */         }
/*     */
/* 775 */         s = 1.0D;
/* 776 */         double tmp = B + E;
/* 777 */         if (tmp >= 0.0D) {
/* 778 */           t = 0.0D;
/* 779 */           if (seg0int != null) seg0int.set(seg0end);
/* 780 */           if (seg1int != null) seg1int.set(seg1start);
/* 781 */           if (param != null) { param[0] = s; param[1] = t; }
/* 782 */           return DIST(A + 2.0D * D + F);
/*     */         }
/* 784 */         if (-tmp >= C) {
/* 785 */           t = 1.0D;
/* 786 */           if (seg0int != null) seg0int.set(seg0end);
/* 787 */           if (seg1int != null) seg1int.set(seg1end);
/* 788 */           if (param != null) { param[0] = s; param[1] = t; }
/* 789 */           return DIST(A + C + F + 2.0D * (D + tmp));
/*     */         }
/*     */
/* 792 */         t = -tmp / C;
/* 793 */         if (seg0int != null) seg0int.set(seg0end);
/* 794 */         if (seg1int != null) seg1int.scaleAdd(t, seg1dir, seg1start);
/* 795 */         if (param != null) { param[0] = s; param[1] = t; }
/* 796 */         return DIST(tmp * t + A + 2.0D * D + F);
/*     */       }
/*     */
/* 803 */       if (t >= 0.0D) {
/* 804 */         if (t <= det) {
/* 805 */           s = 0.0D;
/* 806 */           if (E >= 0.0D) {
/* 807 */             t = 0.0D;
/* 808 */             if (seg0int != null) seg0int.set(seg0start);
/* 809 */             if (seg1int != null) seg1int.set(seg1start);
/* 810 */             if (param != null) { param[0] = s; param[1] = t; }
/* 811 */             return DIST(F);
/*     */           }
/* 813 */           if (-E >= C) {
/* 814 */             t = 1.0D;
/* 815 */             if (seg0int != null) seg0int.set(seg0start);
/* 816 */             if (seg1int != null) seg1int.set(seg1end);
/* 817 */             if (param != null) { param[0] = s; param[1] = t; }
/* 818 */             return DIST(C + 2.0D * E + F);
/*     */           }
/*     */
/* 821 */           t = -E / C;
/* 822 */           if (seg0int != null) seg0int.set(seg0start);
/* 823 */           if (seg1int != null) seg1int.scaleAdd(t, seg1dir, seg1start);
/* 824 */           if (param != null) { param[0] = s; param[1] = t; }
/* 825 */           return DIST(E * t + F);
/*     */         }
/*     */
/* 829 */         double tmp = B + D;
/* 830 */         if (tmp < 0.0D) {
/* 831 */           t = 1.0D;
/* 832 */           if (-tmp >= A) {
/* 833 */             s = 1.0D;
/* 834 */             if (seg0int != null) seg0int.set(seg0end);
/* 835 */             if (seg1int != null) seg1int.set(seg1end);
/* 836 */             if (param != null) { param[0] = s; param[1] = t; }
/* 837 */             return DIST(A + C + F + 2.0D * (E + tmp));
/*     */           }
/*     */
/* 840 */           s = -tmp / A;
/* 841 */           if (seg0int != null) seg0int.scaleAdd(s, seg0dir, seg0start);
/* 842 */           if (seg1int != null) seg1int.set(seg1end);
/* 843 */           if (param != null) { param[0] = s; param[1] = t; }
/* 844 */           return DIST(tmp * s + C + 2.0D * E + F);
/*     */         }
/*     */
/* 848 */         s = 0.0D;
/* 849 */         if (E >= 0.0D) {
/* 850 */           t = 0.0D;
/* 851 */           if (seg0int != null) seg0int.set(seg0start);
/* 852 */           if (seg1int != null) seg1int.set(seg1start);
/* 853 */           if (param != null) { param[0] = s; param[1] = t; }
/* 854 */           return DIST(F);
/*     */         }
/* 856 */         if (-E >= C) {
/* 857 */           t = 1.0D;
/* 858 */           if (seg0int != null) seg0int.set(seg0start);
/* 859 */           if (seg1int != null) seg1int.set(seg1end);
/* 860 */           if (param != null) { param[0] = s; param[1] = t; }
/* 861 */           return DIST(C + 2.0D * E + F);
/*     */         }
/*     */
/* 864 */         t = -E / C;
/* 865 */         if (seg0int != null) seg0int.set(seg0start);
/* 866 */         if (seg1int != null) seg1int.scaleAdd(t, seg1dir, seg1start);
/* 867 */         if (param != null) { param[0] = s; param[1] = t; }
/* 868 */         return DIST(E * t + F);
/*     */       }
/*     */
/* 874 */       if (D < 0.0D) {
/* 875 */         t = 0.0D;
/* 876 */         if (-D >= A) {
/* 877 */           s = 1.0D;
/* 878 */           if (seg0int != null) seg0int.set(seg0end);
/* 879 */           if (seg1int != null) seg1int.set(seg1start);
/* 880 */           if (param != null) { param[0] = s; param[1] = t; }
/* 881 */           return DIST(A + 2.0D * D + F);
/*     */         }
/*     */
/* 884 */         s = -D / A;
/* 885 */         if (seg0int != null) seg0int.scaleAdd(s, seg0dir, seg0start);
/* 886 */         if (seg1int != null) seg1int.set(seg1start);
/* 887 */         if (param != null) { param[0] = s; param[1] = t; }
/* 888 */         return DIST(D * s + F);
/*     */       }
/*     */
/* 892 */       s = 0.0D;
/* 893 */       if (E >= 0.0D) {
/* 894 */         t = 0.0D;
/* 895 */         if (seg0int != null) seg0int.set(seg0start);
/* 896 */         if (seg1int != null) seg1int.set(seg1start);
/* 897 */         if (param != null) { param[0] = s; param[1] = t; }
/* 898 */         return DIST(F);
/*     */       }
/* 900 */       if (-E >= C) {
/* 901 */         t = 1.0D;
/* 902 */         if (seg0int != null) seg0int.set(seg0start);
/* 903 */         if (seg1int != null) seg1int.set(seg1end);
/* 904 */         if (param != null) { param[0] = s; param[1] = t; }
/* 905 */         return DIST(C + 2.0D * E + F);
/*     */       }
/*     */
/* 908 */       t = -E / C;
/* 909 */       if (seg0int != null) seg0int.set(seg0start);
/* 910 */       if (seg1int != null) seg1int.scaleAdd(t, seg1dir, seg1start);
/* 911 */       if (param != null) { param[0] = s; param[1] = t; }
/* 912 */       return DIST(E * t + F);
/*     */     }
/*     */
/* 920 */     if (B > 0.0D)
/*     */     {
/* 922 */       if (D >= 0.0D) {
/* 923 */         double s = 0.0D;
/* 924 */         double t = 0.0D;
/* 925 */         if (seg0int != null) seg0int.set(seg0start);
/* 926 */         if (seg1int != null) seg1int.set(seg1start);
/* 927 */         if (param != null) { param[0] = s; param[1] = t; }
/* 928 */         return DIST(F);
/*     */       }
/* 930 */       if (-D <= A) {
/* 931 */         double s = -D / A;
/* 932 */         double t = 0.0D;
/* 933 */         if (seg0int != null) seg0int.scaleAdd(s, seg0dir, seg0start);
/* 934 */         if (seg1int != null) seg1int.set(seg1start);
/* 935 */         if (param != null) { param[0] = s; param[1] = t; }
/* 936 */         return DIST(D * s + F);
/*     */       }
/*     */
/* 939 */       double E = -seg1dir.dot(diff);
/* 940 */       double s = 1.0D;
/* 941 */       double tmp = A + D;
/* 942 */       if (-tmp >= B) {
/* 943 */         double t = 1.0D;
/* 944 */         if (seg0int != null) seg0int.set(seg0end);
/* 945 */         if (seg1int != null) seg1int.set(seg1end);
/* 946 */         if (param != null) { param[0] = s; param[1] = t; }
/* 947 */         return DIST(A + C + F + 2.0D * (B + D + E));
/*     */       }
/*     */
/* 950 */       double t = -tmp / B;
/* 951 */       if (seg0int != null) seg0int.set(seg0end);
/* 952 */       if (seg1int != null) seg1int.scaleAdd(t, seg1dir, seg1start);
/* 953 */       if (param != null) { param[0] = s; param[1] = t; }
/* 954 */       return DIST(A + 2.0D * D + F + t * (C * t + 2.0D * (B + E)));
/*     */     }
/*     */
/* 960 */     if (-D >= A) {
/* 961 */       double s = 1.0D;
/* 962 */       double t = 0.0D;
/* 963 */       if (seg0int != null) seg0int.set(seg0end);
/* 964 */       if (seg1int != null) seg1int.set(seg1start);
/* 965 */       if (param != null) { param[0] = s; param[1] = t; }
/* 966 */       return DIST(A + 2.0D * D + F);
/*     */     }
/* 968 */     if (D <= 0.0D) {
/* 969 */       double s = -D / A;
/* 970 */       double t = 0.0D;
/* 971 */       if (seg0int != null) seg0int.scaleAdd(s, seg0dir, seg0start);
/* 972 */       if (seg1int != null) seg1int.set(seg1start);
/* 973 */       if (param != null) { param[0] = s; param[1] = t; }
/* 974 */       return DIST(D * s + F);
/*     */     }
/*     */
/* 977 */     double E = -seg1dir.dot(diff);
/* 978 */     double s = 0.0D;
/* 979 */     if (D >= -B) {
/* 980 */       double t = 1.0D;
/* 981 */       if (seg0int != null) seg0int.set(seg0start);
/* 982 */       if (seg1int != null) seg1int.set(seg1end);
/* 983 */       if (param != null) { param[0] = s; param[1] = t; }
/* 984 */       return DIST(C + 2.0D * E + F);
/*     */     }
/*     */
/* 987 */     double t = -D / B;
/* 988 */     if (seg0int != null) seg0int.set(seg0start);
/* 989 */     if (seg1int != null) seg1int.scaleAdd(t, seg1dir, seg1start);
/* 990 */     if (param != null) { param[0] = s; param[1] = t; }
/* 991 */     return DIST(F + t * (2.0D * E + C * t));
/*     */   }
/*     */ }

/* Location:           Z:\System\Library\Java\Extensions\j3dutils.jar
* Qualified Name:     com.sun.j3d.internal.Distance
* JD-Core Version:    0.6.2
*/
TOP

Related Classes of com.sun.j3d.internal.Distance

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.