Как я могу проверить, находится ли Vector3 (x,y,z) между 2 другими Vector3 в Java?
Я хочу создать плагин защиты для серверного программного обеспечения Minecraft, и я хочу работать с Vector3. Я хочу проверить, находится ли Vector3 между 2 позициями (Vector3).
Vector3 имеет значения: x, y и z. Как я могу проверить сейчас, находится ли Вектор между двумя другими?
Vector3 pos1 = new Vector3(100, 10, 100);
Vector3 pos2 = new Vector3(10, 100, 43);
Vector3 vector3tocheck = new Vector3(60, 23, 1); // it should be between the 2 positions
public boolean isInTwoVectors(Vector3 pos1, Vector3 pos2, Vector3 vector3tocheck) {
// Here idk how to continue.
}
Я ожидаю результата, если он в двух позициях или нет.
1 ответ
Решение
public boolean isInTwoVectors(Vector3 pos1, Vector3 pos2, Vector3 check) {
int minX = Math.min(pos1.x, pos2.x);
int maxX = Math.max(pos1.x, pos2.x);
int minY = Math.min(pos1.y, pos2.y);
int maxY = Math.max(pos1.y, pos2.y);
int minZ = Math.min(pos1.z, pos2.z);
int maxZ = Math.max(pos1.z, pos2.z);
return check.x >= minX && check.x <= maxX && check.y >= minY && check.y <= maxY
&& check.z >= minZ && check.z <= maxZ;
}
Просто проверьте все границы x, y и z на предмет того, находится ли вектор внутри. Для записи, в вашем примере, данный вектор не будет в пределах границ, потому что его значение z выходит за пределы (вне [43,100]). В этом случае (не заботясь о z-значении), вы должны проверять только значения x и y следующим образом:
public boolean isInTwoVectorsXY(Vector3 pos1, Vector3 pos2, Vector3 check) {
int minX = Math.min(pos1.x, pos2.x);
int maxX = Math.max(pos1.x, pos2.x);
int minY = Math.min(pos1.y, pos2.y);
int maxY = Math.max(pos1.y, pos2.y);
return check.x >= minX && check.x <= maxX && check.y >= minY && check.y <= maxY;
}
Или, может быть, вы на самом деле имеете в виду что-то подобное или это?