- Баллы
- 123
- Имя в Minecraft
- Reality_SC
Речь только про прямоугольные параллелепипеды, или ещё и про полигонные регионы тоже?
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Я нашел решение без AABB.А как Location преоброзовать в AABB то?..
Но я конечно до сих пор надеюсь на более легкий способ..
package Exemple;
public class Cuboid {
private int xMin;
private int xMax;
private int yMin;
private int yMax;
private int zMin;
private int zMax;
public Cuboid(int x1, int y1, int z1, int x2, int y2, int z2) {
if (x1 < x2) {
xMin = x1;
xMax = x2;
} else {
xMin = x2;
xMax = x1;
}
if (y1 < y2) {
yMin = y1;
yMax = y2;
} else {
yMin = y2;
yMax = y1;
}
if (z1 < z2) {
zMin = z1;
zMax = z2;
} else {
zMin = z2;
zMax = z1;
}
}
public boolean intersects(Cuboid cuboid) {
return cuboid.xMin <= xMax && cuboid.xMax >= xMin
&& cuboid.yMin <= yMax && cuboid.yMax >= yMin
&& cuboid.zMin <= zMax && cuboid.zMax >= zMin;
}
public boolean contains(int x, int y, int z) {
return x >= xMin && x <= xMax
&& y >= yMin && y <= yMax
&& z >= zMin && z <= zMax;
}
}
Секундочку, я сейчас загуглю все непонятные слова, а потом отвечу..Речь только про прямоугольные параллелепипеды, или ещё и про полигонные регионы тоже?

Ухтышка, кажется годнота!!!Я нашел решение без AABB.
Java:package Exemple; public class Cuboid { private int xMin; private int xMax; private int yMin; private int yMax; private int zMin; private int zMax; public Cuboid(int x1, int y1, int z1, int x2, int y2, int z2) { if (x1 < x2) { xMin = x1; xMax = x2; } else { xMin = x2; xMax = x1; } if (y1 < y2) { yMin = y1; yMax = y2; } else { yMin = y2; yMax = y1; } if (z1 < z2) { zMin = z1; zMax = z2; } else { zMin = z2; zMax = z1; } } public boolean intersects(Cuboid cuboid) { return cuboid.xMin <= xMax && cuboid.xMax >= xMin && cuboid.yMin <= yMax && cuboid.yMax >= yMin && cuboid.zMin <= zMax && cuboid.zMax >= zMin; } public boolean contains(int x, int y, int z) { return x >= xMin && x <= xMax && y >= yMin && y <= yMax && z >= zMin && z <= zMax; } }

Загуглил. И в общем речь только про прямоугольные параллелепипеды (где можно получить медаль за что я это слово сам написал, а не скопировал?Речь только про прямоугольные параллелепипеды, или ещё и про полигонные регионы тоже?
)! А точнее только про две локации которые сораняються как границы региона (Ну как и в WE/WG там же тоже выделяешь две локации. Вот у меня тоже самое!)! Ох, главное чтоб оно работало, на это я уже поизменять сам смогу)А что, Math.min(...) и Math.max(...) уже отменили?![]()
Да работает оно. Проверяет 2 кубоида и точку внутри кубоида.Загуглил. И в общем речь только про прямоугольные параллелепипеды (где можно получить медаль за что я это слово сам написал, а не скопировал?)! А точнее только про две локации которые сораняються как границы региона (Ну как и в WE/WG там же тоже выделяешь две локации. Вот у меня тоже самое!)!
Ох, главное чтоб оно работало, на это я уже поизменять сам смогу)
Это и есть AABB, только сделан очень костыльно.Я нашел решение без AABB.
Java:package Exemple; public class Cuboid { private int xMin; private int xMax; private int yMin; private int yMax; private int zMin; private int zMax; public Cuboid(int x1, int y1, int z1, int x2, int y2, int z2) { if (x1 < x2) { xMin = x1; xMax = x2; } else { xMin = x2; xMax = x1; } if (y1 < y2) { yMin = y1; yMax = y2; } else { yMin = y2; yMax = y1; } if (z1 < z2) { zMin = z1; zMax = z2; } else { zMin = z2; zMax = z1; } } public boolean intersects(Cuboid cuboid) { return cuboid.xMin <= xMax && cuboid.xMax >= xMin && cuboid.yMin <= yMax && cuboid.yMax >= yMin && cuboid.zMin <= zMax && cuboid.zMax >= zMin; } public boolean contains(int x, int y, int z) { return x >= xMin && x <= xMax && y >= yMin && y <= yMax && z >= zMin && z <= zMax; } }
Ну главное понятный и по мин макс работает.Это и есть AABB, только сделан очень костыльно.
Он непонятный. Тем более вместо x1,x2... можно было бы использовать Vector из Bukkit APIНу главное понятный и по мин макс работает.
public static boolean isIntersects(RegionManager.Selection newRegion, RegionManager.Selection oldRegion) {
int minX1 = Math.min(newRegion.getFirst().getBlockX(), newRegion.getSecond().getBlockX());
int minY1 = Math.min(newRegion.getFirst().getBlockY(), newRegion.getSecond().getBlockY());
int minZ1 = Math.min(newRegion.getFirst().getBlockZ(), newRegion.getSecond().getBlockZ());
int maxX1 = Math.max(newRegion.getFirst().getBlockX(), newRegion.getSecond().getBlockX());
int maxY1 = Math.max(newRegion.getFirst().getBlockY(), newRegion.getSecond().getBlockY());
int maxZ1 = Math.max(newRegion.getFirst().getBlockZ(), newRegion.getSecond().getBlockZ());
int minX2 = Math.min(oldRegion.getFirst().getBlockX(), oldRegion.getSecond().getBlockX());
int minY2 = Math.min(oldRegion.getFirst().getBlockY(), oldRegion.getSecond().getBlockY());
int minZ2 = Math.min(oldRegion.getFirst().getBlockZ(), oldRegion.getSecond().getBlockZ());
int maxX2 = Math.max(oldRegion.getFirst().getBlockX(), oldRegion.getSecond().getBlockX());
int maxY2 = Math.max(oldRegion.getFirst().getBlockY(), oldRegion.getSecond().getBlockY());
int maxZ2 = Math.max(oldRegion.getFirst().getBlockZ(), oldRegion.getSecond().getBlockZ());
return minX1 <= maxX2 && maxX1 >= minX2
&& minY1 <= maxY2 && maxY1 >= minY2
&& minZ1 <= maxZ2 && maxZ1 >= minZ2;
}
Зато это могу понять даже яЭто и есть AABB, только сделан очень костыльно.

Bozhe, kakiye govnoedy, poidu molitsya emu: https://en.wikipedia.org/wiki/James_GoslingЯ переделаль вот так:
Вроде переделал правильно..)Код:public static boolean isIntersects(RegionManager.Selection newRegion, RegionManager.Selection oldRegion) { int minX1 = Math.min(newRegion.getFirst().getBlockX(), newRegion.getSecond().getBlockX()); int minY1 = Math.min(newRegion.getFirst().getBlockY(), newRegion.getSecond().getBlockY()); int minZ1 = Math.min(newRegion.getFirst().getBlockZ(), newRegion.getSecond().getBlockZ()); int maxX1 = Math.max(newRegion.getFirst().getBlockX(), newRegion.getSecond().getBlockX()); int maxY1 = Math.max(newRegion.getFirst().getBlockY(), newRegion.getSecond().getBlockY()); int maxZ1 = Math.max(newRegion.getFirst().getBlockZ(), newRegion.getSecond().getBlockZ()); int minX2 = Math.min(oldRegion.getFirst().getBlockX(), oldRegion.getSecond().getBlockX()); int minY2 = Math.min(oldRegion.getFirst().getBlockY(), oldRegion.getSecond().getBlockY()); int minZ2 = Math.min(oldRegion.getFirst().getBlockZ(), oldRegion.getSecond().getBlockZ()); int maxX2 = Math.max(oldRegion.getFirst().getBlockX(), oldRegion.getSecond().getBlockX()); int maxY2 = Math.max(oldRegion.getFirst().getBlockY(), oldRegion.getSecond().getBlockY()); int maxZ2 = Math.max(oldRegion.getFirst().getBlockZ(), oldRegion.getSecond().getBlockZ()); return minX1 <= maxX2 && maxX1 >= minX2 && minY1 <= maxY2 && maxY1 >= minY2 && minZ1 <= maxZ2 && maxZ1 >= minZ2; }
Selection - просто две локации! Первая - getFirst() Вторая - getSecond()!
Зато это могу понять даже я![]()
Может быть molitsya?Bozhe, kakiye govnoedy, poidu moitsya emu: https://en.wikipedia.org/wiki/James_Gosling
Ты только все запутал.Я переделаль вот так:
Вроде переделал правильно..)Код:public static boolean isIntersects(RegionManager.Selection newRegion, RegionManager.Selection oldRegion) { int minX1 = Math.min(newRegion.getFirst().getBlockX(), newRegion.getSecond().getBlockX()); int minY1 = Math.min(newRegion.getFirst().getBlockY(), newRegion.getSecond().getBlockY()); int minZ1 = Math.min(newRegion.getFirst().getBlockZ(), newRegion.getSecond().getBlockZ()); int maxX1 = Math.max(newRegion.getFirst().getBlockX(), newRegion.getSecond().getBlockX()); int maxY1 = Math.max(newRegion.getFirst().getBlockY(), newRegion.getSecond().getBlockY()); int maxZ1 = Math.max(newRegion.getFirst().getBlockZ(), newRegion.getSecond().getBlockZ()); int minX2 = Math.min(oldRegion.getFirst().getBlockX(), oldRegion.getSecond().getBlockX()); int minY2 = Math.min(oldRegion.getFirst().getBlockY(), oldRegion.getSecond().getBlockY()); int minZ2 = Math.min(oldRegion.getFirst().getBlockZ(), oldRegion.getSecond().getBlockZ()); int maxX2 = Math.max(oldRegion.getFirst().getBlockX(), oldRegion.getSecond().getBlockX()); int maxY2 = Math.max(oldRegion.getFirst().getBlockY(), oldRegion.getSecond().getBlockY()); int maxZ2 = Math.max(oldRegion.getFirst().getBlockZ(), oldRegion.getSecond().getBlockZ()); return minX1 <= maxX2 && maxX1 >= minX2 && minY1 <= maxY2 && maxY1 >= minY2 && minZ1 <= maxZ2 && maxZ1 >= minZ2; }
Selection - просто две локации! Первая - getFirst() Вторая - getSecond()!
Зато это могу понять даже я![]()
fixed.Может быть molitsya?
Я хз, создавать отдельный клас...Ты только все запутал.
Cuboid cuboid = new Cuboid(
loc1.getBlockX(),loc1.getBlockY(),loc1.getBlockZ(),
loc2.getBlockX(),loc2.getBlockY(),loc2.getBlockZ()
);
cuboid.intersects(cuboid2);
Пытаюсь понять как это может быть, но пока-что не могу..А если ни одна угловая точка любого региона не лежит внутри второго? ))


Хотя я понял, по идее, это возожно, если первый регион больше второго, и тогда не одна его угловая точка не лежит внутри второго... Я прав?А если ни одна угловая точка любого региона не лежит внутри второго? ))
А если как скинул RSC?Такое может быть только при одном условие. Когда регион строго на том же место где 2й. Но мой код это тоже определяет.
Проверил такое, тоже true.