📄 distance.java
字号:
if (seg1int != null) seg1int.set (seg1end); if (param != null) { param[0] = s; param[1] = t; } return DIST(C+2*E+F); } else if (-tmp >= A) { s = 1; if (seg0int != null) seg0int.set (seg0end); if (seg1int != null) seg1int.set (seg1end); if (param != null) { param[0] = s; param[1] = t; } return DIST(A+C+F+2*(E+tmp)); } else { s = -tmp/A; if (seg0int != null) seg0int.scaleAdd (s, seg0dir, seg0start); if (seg1int != null) seg1int.set (seg1end); if (param != null) { param[0] = s; param[1] = t; } return DIST(tmp*s+C+2*E+F); } } } else { // region 7 (side) t = 0; if (D >= 0) { s = 0; if (seg0int != null) seg0int.set (seg0start); if (seg1int != null) seg1int.set (seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(F); } else if (-D >= A) { s = 1; if (seg0int != null) seg0int.set (seg0end); if (seg1int != null) seg1int.set (seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(A+2*D+F); } else { s = -D/A; if (seg0int != null) seg0int.scaleAdd (s, seg0dir, seg0start); if (seg1int != null) seg1int.set (seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(D*s+F); } } } else { if (t >= 0) { if (t <= det) { // region 1 (side) s = 1; tmp = B+E; if (tmp >= 0) { t = 0; if (seg0int != null) seg0int.set (seg0end); if (seg1int != null) seg1int.set (seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(A+2*D+F); } else if (-tmp >= C) { t = 1; if (seg0int != null) seg0int.set (seg0end); if (seg1int != null) seg1int.set (seg1end); if (param != null) { param[0] = s; param[1] = t; } return DIST(A+C+F+2*(D+tmp)); } else { t = -tmp/C; if (seg0int != null) seg0int.set (seg0end); if (seg1int != null) seg1int.scaleAdd (t, seg1dir, seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(tmp*t+A+2*D+F); } } else { // region 2 (corner) tmp = B+D; if (-tmp <= A) { t = 1; if (tmp >= 0) { s = 0; if (seg0int != null) seg0int.set (seg0start); if (seg1int != null) seg1int.set (seg1end); if (param != null) { param[0] = s; param[1] = t; } return DIST(C+2*E+F); } else { s = -tmp/A; if (seg0int!=null) seg0int.scaleAdd (s, seg0dir, seg0start); if (seg1int!=null) seg1int.set (seg1end); if (param != null) { param[0] = s; param[1] = t; } return DIST(tmp*s+C+2*E+F); } } else { s = 1; tmp = B+E; if (tmp >= 0) { t = 0; if (seg0int!=null) seg0int.set (seg0end); if (seg1int!=null) seg1int.set (seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(A+2*D+F); } else if (-tmp >= C) { t = 1; if (seg0int != null) seg0int.set (seg0end); if (seg1int != null) seg1int.set (seg1end); if (param != null) { param[0] = s; param[1] = t; } return DIST(A+C+F+2*(D+tmp)); } else { t = -tmp/C; if (seg0int!=null) seg0int.set (seg0end); if (seg1int!=null) seg1int.scaleAdd (t, seg1dir, seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(tmp*t+A+2*D+F); } } } } else { // region 8 (corner) if (-D < A) { t = 0; if (D >= 0) { s = 0; if (seg0int != null) seg0int.set (seg0start); if (seg1int != null) seg1int.set (seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(F); } else { s = -D/A; if (seg0int != null) seg0int.scaleAdd (s, seg0dir, seg0start); if (seg1int != null) seg1int.set (seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(D*s+F); } } else { s = 1; tmp = B+E; if (tmp >= 0) { t = 0; if (seg0int != null) seg0int.set (seg0end); if (seg1int != null) seg1int.set (seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(A+2*D+F); } else if (-tmp >= C) { t = 1; if (seg0int != null) seg0int.set (seg0end); if (seg1int != null) seg1int.set (seg1end); if (param != null) { param[0] = s; param[1] = t; } return DIST(A+C+F+2*(D+tmp)); } else { t = -tmp/C; if (seg0int != null) seg0int.set (seg0end); if (seg1int != null) seg1int.scaleAdd (t, seg1dir, seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(tmp*t+A+2*D+F); } } } } } else { if (t >= 0) { if (t <= det) { // region 5 (side) s = 0; if (E >= 0) { t = 0; if (seg0int != null) seg0int.set (seg0start); if (seg1int != null) seg1int.set (seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(F); } else if (-E >= C) { t = 1; if (seg0int != null) seg0int.set (seg0start); if (seg1int != null) seg1int.set (seg1end); if (param != null) { param[0] = s; param[1] = t; } return DIST(C+2*E+F); } else { t = -E/C; if (seg0int != null) seg0int.set (seg0start); if (seg1int != null) seg1int.scaleAdd (t, seg1dir, seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(E*t+F); } } else { // region 4 (corner) tmp = B+D; if (tmp < 0) { t = 1; if (-tmp >= A) { s = 1; if (seg0int != null) seg0int.set (seg0end); if (seg1int != null) seg1int.set (seg1end); if (param != null) { param[0] = s; param[1] = t; } return DIST(A+C+F+2*(E+tmp)); } else { s = -tmp/A; if (seg0int != null) seg0int.scaleAdd (s, seg0dir, seg0start); if (seg1int != null) seg1int.set (seg1end); if (param != null) { param[0] = s; param[1] = t; } return DIST(tmp*s+C+2*E+F); } } else { s = 0; if (E >= 0) { t = 0; if (seg0int != null) seg0int.set (seg0start); if (seg1int != null) seg1int.set (seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(F); } else if (-E >= C) { t = 1; if (seg0int != null) seg0int.set (seg0start); if (seg1int != null) seg1int.set (seg1end); if (param != null) { param[0] = s; param[1] = t; } return DIST(C+2*E+F); } else { t = -E/C; if (seg0int != null) seg0int.set (seg0start); if (seg1int != null) seg1int.scaleAdd (t, seg1dir, seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(E*t+F); } } } } else { // region 6 (corner) if (D < 0) { t = 0; if (-D >= A) { s = 1; if (seg0int != null) seg0int.set (seg0end); if (seg1int != null) seg1int.set (seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(A+2*D+F); } else { s = -D/A; if (seg0int != null) seg0int.scaleAdd (s, seg0dir, seg0start); if (seg1int != null) seg1int.set (seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(D*s+F); } } else { s = 0; if (E >= 0) { t = 0; if (seg0int != null) seg0int.set (seg0start); if (seg1int != null) seg1int.set (seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(F); } else if (-E >= C) { t = 1; if (seg0int != null) seg0int.set (seg0start); if (seg1int != null) seg1int.set (seg1end); if (param != null) { param[0] = s; param[1] = t; } return DIST(C+2*E+F); } else { t = -E/C; if (seg0int != null) seg0int.set (seg0start); if (seg1int != null) seg1int.scaleAdd (t, seg1dir, seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(E*t+F); } } } } } else { // line segments are parallel if (B > 0) { // direction vectors form an obtuse angle if (D >= 0) { s = 0; t = 0; if (seg0int != null) seg0int.set (seg0start); if (seg1int != null) seg1int.set (seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(F); } else if (-D <= A) { s = -D/A; t = 0; if (seg0int != null) seg0int.scaleAdd (s, seg0dir, seg0start); if (seg1int != null) seg1int.set (seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(D*s+F); } else { E = -seg1dir.dot (diff); //-Dot(seg1dir,diff); s = 1; tmp = A+D; if (-tmp >= B) { t = 1; if (seg0int != null) seg0int.set (seg0end); if (seg1int != null) seg1int.set (seg1end); if (param != null) { param[0] = s; param[1] = t; } return DIST(A+C+F+2*(B+D+E)); } else { t = -tmp/B; if (seg0int != null) seg0int.set (seg0end); if (seg1int != null) seg1int.scaleAdd (t, seg1dir, seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(A+2*D+F+t*(C*t+2*(B+E))); } } } else { // direction vectors form an acute angle if (-D >= A) { s = 1; t = 0; if (seg0int != null) seg0int.set (seg0end); if (seg1int != null) seg1int.set (seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(A+2*D+F); } else if (D <= 0) { s = -D/A; t = 0; if (seg0int != null) seg0int.scaleAdd (s, seg0dir, seg0start); if (seg1int != null) seg1int.set (seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(D*s+F); } else { E = -seg1dir.dot (diff); //-Dot(seg1dir,diff); s = 0; if (D >= -B) { t = 1; if (seg0int != null) seg0int.set (seg0start); if (seg1int != null) seg1int.set (seg1end); if (param != null) { param[0] = s; param[1] = t; } return DIST(C+2*E+F); } else { t = -D/B; if (seg0int != null) seg0int.set (seg0start); if (seg1int != null) seg1int.scaleAdd (t, seg1dir, seg1start); if (param != null) { param[0] = s; param[1] = t; } return DIST(F+t*(2*E+C*t)); } } } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -