Rectangle.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. /**
  2. * @author mr.doob / http://mrdoob.com/
  3. */
  4. THREE.Rectangle = function (x1, y1, x2, y2) {
  5. var _x1 = x1, _y1 = y1,
  6. _x2 = x2, _y2 = y2,
  7. _width = _x2 - _x1, _height = _y2 - _y1,
  8. _isEmpty = false;
  9. function resize() {
  10. _width = _x2 - _x1;
  11. _height = _y2 - _y1;
  12. }
  13. this.getX = function () {
  14. return _x1;
  15. }
  16. this.getY = function () {
  17. return _y1;
  18. }
  19. this.getWidth = function () {
  20. return _width;
  21. }
  22. this.getHeight = function () {
  23. return _height;
  24. }
  25. this.getX1 = function() {
  26. return _x1;
  27. }
  28. this.getY1 = function() {
  29. return _y1;
  30. }
  31. this.getX2 = function() {
  32. return _x2;
  33. }
  34. this.getY2 = function() {
  35. return _y2;
  36. }
  37. this.set = function (x1, y1, x2, y2) {
  38. _isEmpty = false;
  39. _x1 = x1; _y1 = y1;
  40. _x2 = x2; _y2 = y2;
  41. resize();
  42. }
  43. this.addPoint = function (x, y) {
  44. if (_isEmpty) {
  45. _isEmpty = false;
  46. _x1 = x; _y1 = y;
  47. _x2 = x; _y2 = y;
  48. } else {
  49. _x1 = Math.min(_x1, x);
  50. _y1 = Math.min(_y1, y);
  51. _x2 = Math.max(_x2, x);
  52. _y2 = Math.max(_y2, y);
  53. }
  54. resize();
  55. }
  56. this.addRectangle = function (r) {
  57. if (_isEmpty) {
  58. _isEmpty = false;
  59. _x1 = r.getX1(); _y1 = r.getY1();
  60. _x2 = r.getX2(); _y2 = r.getY2();
  61. } else {
  62. _x1 = Math.min(_x1, r.getX1());
  63. _y1 = Math.min(_y1, r.getY1());
  64. _x2 = Math.max(_x2, r.getX2());
  65. _y2 = Math.max(_y2, r.getY2());
  66. }
  67. resize();
  68. }
  69. this.inflate = function (v) {
  70. _x1 -= v; _y1 -= v;
  71. _x2 += v; _y2 += v;
  72. resize();
  73. }
  74. this.minSelf = function(r) {
  75. _x1 = Math.max(_x1, r.getX1());
  76. _y1 = Math.max(_y1, r.getY1());
  77. _x2 = Math.min(_x2, r.getX2());
  78. _y2 = Math.min(_y2, r.getY2());
  79. resize();
  80. }
  81. /*
  82. this.containsPoint = function (x, y) {
  83. return x > _x1 && x < _x2 && y > _y1 && y < _y2;
  84. }
  85. */
  86. this.instersects = function (r) {
  87. return Math.min(_x2, r.getX2()) - Math.max(_x1, r.getX1()) > 0 && Math.min(_y2, r.getY2()) - Math.max(_y1, r.getY1()) > 0;
  88. }
  89. this.empty = function () {
  90. _isEmpty = true;
  91. _x1 = 0; _y1 = 0;
  92. _x2 = 0, _y2 = 0;
  93. resize();
  94. }
  95. this.toString = function () {
  96. return "THREE.Rectangle (x1: " + _x1 + ", y1: " + _y2 + ", x2: " + _x2 + ", y1: " + _y1 + ", width: " + _width + ", height: " + _height + ")";
  97. }
  98. }
粤ICP备19079148号