@@ -9,7 +9,7 @@ public class Grid extends ParticleObject {
99 private Location minimumLocation ;
1010 private Location maximumLocation ;
1111 private boolean isXDimension = false ;
12- private boolean isYDimension = true ;
12+ private boolean isYDimension = false ;
1313
1414 public Grid (Location minimumLocation , Location maximumLocation ) {
1515 this (minimumLocation , maximumLocation , 1.2D );
@@ -41,12 +41,24 @@ public Grid(Location minimumLocation, Location maximumLocation, double gridLengt
4141
4242 @ Override
4343 public void show () {
44- double height = Math . abs ( maximumLocation . getY () - minimumLocation . getY ()) ;
44+ double height ;
4545 double weight ;
46- if (isXDimension ) {
47- weight = Math .abs (maximumLocation .getX () - minimumLocation .getX ());
46+ // 在Y平面下有点不一样
47+ if (isYDimension ) {
48+ if (Math .abs (minimumLocation .getX () - maximumLocation .getX ()) > Math .abs (minimumLocation .getZ () - maximumLocation .getZ ())) {
49+ height = Math .abs (minimumLocation .getX () - maximumLocation .getX ());
50+ weight = Math .abs (minimumLocation .getZ () - maximumLocation .getZ ());
51+ } else {
52+ height = Math .abs (minimumLocation .getZ () - maximumLocation .getZ ());
53+ weight = Math .abs (minimumLocation .getX () - maximumLocation .getX ());
54+ }
4855 } else {
49- weight = Math .abs (maximumLocation .getZ () - minimumLocation .getZ ());
56+ height = Math .abs (maximumLocation .getY () - minimumLocation .getY ());
57+ if (isXDimension ) {
58+ weight = Math .abs (maximumLocation .getX () - minimumLocation .getX ());
59+ } else {
60+ weight = Math .abs (maximumLocation .getZ () - minimumLocation .getZ ());
61+ }
5062 }
5163 int heightSideLine = (int ) (height / gridLength );
5264 int weightSideLine = (int ) (weight / gridLength );
@@ -55,6 +67,35 @@ public void show() {
5567 Location minLocation = findMinimumLocation ();
5668 Location maxLocation = findMaximumLocation ();
5769
70+ // spawnParticle(minimumLocation);
71+ // spawnParticle(maximumLocation);
72+
73+ // spawnParticle(minLocation);
74+ // spawnParticle(maxLocation);
75+
76+ if (isYDimension ) {
77+ for (int i = 1 ; i <= heightSideLine ; i ++) {
78+ Vector vector = maxLocation .clone ().subtract (minLocation ).toVector ();
79+ vector .setZ (0 ).normalize ();
80+
81+ Location start = minLocation .clone ().add (0 , 0 , i * gridLength );
82+ for (double j = 0 ; j < weight ; j += 0.2 ) {
83+ spawnParticle (start .clone ().add (vector .clone ().multiply (j )));
84+ }
85+ }
86+
87+ for (int i = 1 ; i <= weightSideLine ; i ++) {
88+ Vector vector = maxLocation .clone ().subtract (minLocation ).toVector ();
89+ vector .setX (0 ).normalize ();
90+ Location start = minLocation .clone ().add (i * gridLength , 0 , 0 );
91+
92+ for (double j = 0 ; j < height ; j += 0.2 ) {
93+ spawnParticle (start .clone ().add (vector .clone ().multiply (j )));
94+ }
95+ }
96+ return ;
97+ }
98+
5899 for (int i = 1 ; i <= heightSideLine ; i ++) {
59100 Vector vector = maxLocation .clone ().subtract (minLocation ).toVector ();
60101 vector .setY (0 ).normalize ();
@@ -83,6 +124,25 @@ public void show() {
83124 }
84125
85126 private Location findMinimumLocation () {
127+ if (isYDimension ) {
128+ if (minimumLocation .getBlockX () < maximumLocation .getBlockX ()) {
129+ if (minimumLocation .getBlockZ () < maximumLocation .getBlockZ ()) {
130+ return minimumLocation ;
131+ } else {
132+ Location minToLower = minimumLocation .clone ();
133+ minToLower .setZ (maximumLocation .getZ ());
134+ return minToLower ;
135+ }
136+ } else {
137+ if (minimumLocation .getBlockZ () < maximumLocation .getBlockZ ()) {
138+ Location maxToLower = maximumLocation .clone ();
139+ maxToLower .setZ (minimumLocation .getZ ());
140+ return maxToLower ;
141+ } else {
142+ return maximumLocation ;
143+ }
144+ }
145+ }
86146 if (isXDimension ) {
87147 // 以下的代码请把 minimumLoc 当做平面坐标系的中心
88148 // maximumLoc 在第一第二象限的情况
@@ -92,7 +152,7 @@ private Location findMinimumLocation() {
92152 maxToLower .setY (minimumLocation .getY ());
93153 return maxToLower ;
94154 }
95- // maximumLoc 在第三第四象限的情况
155+ // maximumLoc 在第三第四象限的情况
96156 } else {
97157 if (minimumLocation .getBlockX () > maximumLocation .getBlockX ()) {
98158 return maximumLocation ;
@@ -123,6 +183,25 @@ private Location findMinimumLocation() {
123183 }
124184
125185 private Location findMaximumLocation () {
186+ if (isYDimension ) {
187+ if (minimumLocation .getBlockX () < maximumLocation .getBlockX ()) {
188+ if (minimumLocation .getBlockZ () < maximumLocation .getBlockZ ()) {
189+ return maximumLocation ;
190+ } else {
191+ Location minToHigher = minimumLocation .clone ();
192+ minToHigher .setX (maximumLocation .getX ());
193+ return minToHigher ;
194+ }
195+ } else {
196+ if (minimumLocation .getBlockZ () < maximumLocation .getBlockZ ()) {
197+ Location maxToLower = maximumLocation .clone ();
198+ maxToLower .setX (minimumLocation .getX ());
199+ return maxToLower ;
200+ } else {
201+ return minimumLocation ;
202+ }
203+ }
204+ }
126205 if (isXDimension ) {
127206 if (minimumLocation .getBlockY () < maximumLocation .getBlockY ()) {
128207 if (minimumLocation .getBlockX () > maximumLocation .getBlockX ()) {
0 commit comments