/* */ 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
*/