boop
This commit is contained in:
parent
dedc389369
commit
6f31f76ee4
|
@ -5,6 +5,7 @@ import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
@ -118,19 +119,25 @@ public class Camera extends JavaPlugin implements Listener {
|
||||||
.add(P.get(i + 1).clone().multiply(t)));
|
.add(P.get(i + 1).clone().multiply(t)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
curve.add(P.get(0));
|
curve.add(P.get(0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String prettyLocation(LocationQuaternion point) {
|
public static String prettyLocation(Location point) {
|
||||||
point.updateEulerAngles();
|
|
||||||
return String.format("X=%05.2f, Y=%05.2f, Z=%05.2f, P=%05.2f, Y=%05.2f",
|
return String.format("X=%05.2f, Y=%05.2f, Z=%05.2f, P=%05.2f, Y=%05.2f",
|
||||||
point.getX(), point.getY(), point.getZ(),
|
point.getX(), point.getY(), point.getZ(),
|
||||||
point.getPitch(), point.getYaw());
|
point.getPitch(), point.getYaw());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String prettyLocation(LocationQuaternion point) {
|
||||||
|
return String.format(
|
||||||
|
"X=%05.2f, Y=%05.2f, Z=%05.2f, P=%05.2f, Y=%05.2f, R=%05.2f, w=%05.2f, x=%05.2f, y=%05.2f, z=%05.2f",
|
||||||
|
point.getX(), point.getY(), point.getZ(),
|
||||||
|
point.getPitch(), point.getYaw(), point.roll,
|
||||||
|
point.qw, point.qx, point.qy, point.qz);
|
||||||
|
}
|
||||||
|
|
||||||
public static void broadlog(String msg) {
|
public static void broadlog(String msg) {
|
||||||
Camera.logger.log(Level.INFO, msg);
|
Camera.logger.log(Level.INFO, msg);
|
||||||
Bukkit.broadcastMessage(msg);
|
Bukkit.broadcastMessage(msg);
|
||||||
|
|
|
@ -4,14 +4,13 @@ import org.bukkit.Location;
|
||||||
|
|
||||||
public class LocationQuaternion extends Location {
|
public class LocationQuaternion extends Location {
|
||||||
|
|
||||||
private double qw;
|
public double qw;
|
||||||
private double qx;
|
public double qx;
|
||||||
private double qy;
|
public double qy;
|
||||||
private double qz;
|
public double qz;
|
||||||
private float roll = 0;
|
public float roll = 0;
|
||||||
|
|
||||||
private static final float deg2grad = (float) Math.PI / 180.0f;
|
private static final float deg2rad = (float) Math.PI / 180.0f;
|
||||||
private static final float grad2deg = 1 / deg2grad;
|
|
||||||
|
|
||||||
// https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles#Source_code
|
// https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles#Source_code
|
||||||
public LocationQuaternion(Location location) {
|
public LocationQuaternion(Location location) {
|
||||||
|
@ -26,11 +25,6 @@ public class LocationQuaternion extends Location {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateEulerAngles() {
|
public void updateEulerAngles() {
|
||||||
// roll (x-axis rotation)
|
|
||||||
double sinr_cosp = 2 * (qw * qx + qy * qz);
|
|
||||||
double cosr_cosp = 1 - 2 * (qx * qx + qy * qy);
|
|
||||||
roll = (float) Math.atan2(sinr_cosp, cosr_cosp) * grad2deg;
|
|
||||||
|
|
||||||
// pitch (y-axis rotation)
|
// pitch (y-axis rotation)
|
||||||
double pitch;
|
double pitch;
|
||||||
double sinp = 2 * (qw * qy - qz * qx);
|
double sinp = 2 * (qw * qy - qz * qx);
|
||||||
|
@ -39,19 +33,18 @@ public class LocationQuaternion extends Location {
|
||||||
} else {
|
} else {
|
||||||
pitch = Math.asin(sinp);
|
pitch = Math.asin(sinp);
|
||||||
}
|
}
|
||||||
setPitch((float) pitch * grad2deg);
|
setPitch((float) pitch / deg2rad);
|
||||||
|
|
||||||
// yaw (z-axis rotation)
|
// yaw (z-axis rotation)
|
||||||
double siny_cosp = 2 * (qw * qz + qx * qy);
|
double siny_cosp = 2 * (qw * qz + qx * qy);
|
||||||
double cosy_cosp = 1 - 2 * (qy * qy + qz * qz);
|
double cosy_cosp = 1 - 2 * (qy * qy + qz * qz);
|
||||||
double yaw = Math.atan2(siny_cosp, cosy_cosp);
|
double yaw = Math.atan2(siny_cosp, cosy_cosp);
|
||||||
setYaw((float) yaw * grad2deg);
|
setYaw((float) yaw / deg2rad);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateQuaternionAngles() {
|
public void updateQuaternionAngles() {
|
||||||
float yaw = getYaw() * deg2grad;
|
float yaw = getYaw() * deg2rad;
|
||||||
float pitch = getPitch() * deg2grad;
|
float pitch = getPitch() * deg2rad;
|
||||||
|
|
||||||
double cy = Math.cos(yaw * 0.5);
|
double cy = Math.cos(yaw * 0.5);
|
||||||
double sy = Math.sin(yaw * 0.5);
|
double sy = Math.sin(yaw * 0.5);
|
||||||
|
@ -91,7 +84,6 @@ public class LocationQuaternion extends Location {
|
||||||
|
|
||||||
public LocationQuaternion add(LocationQuaternion loc) {
|
public LocationQuaternion add(LocationQuaternion loc) {
|
||||||
super.add(loc);
|
super.add(loc);
|
||||||
|
|
||||||
qw += loc.qw;
|
qw += loc.qw;
|
||||||
qx += loc.qx;
|
qx += loc.qx;
|
||||||
qy += loc.qy;
|
qy += loc.qy;
|
||||||
|
@ -103,7 +95,6 @@ public class LocationQuaternion extends Location {
|
||||||
|
|
||||||
public LocationQuaternion subtract(LocationQuaternion loc) {
|
public LocationQuaternion subtract(LocationQuaternion loc) {
|
||||||
super.subtract(loc);
|
super.subtract(loc);
|
||||||
|
|
||||||
qw -= loc.qw;
|
qw -= loc.qw;
|
||||||
qx -= loc.qx;
|
qx -= loc.qx;
|
||||||
qy -= loc.qy;
|
qy -= loc.qy;
|
||||||
|
@ -115,11 +106,10 @@ public class LocationQuaternion extends Location {
|
||||||
|
|
||||||
public LocationQuaternion multiply(double m) {
|
public LocationQuaternion multiply(double m) {
|
||||||
super.multiply(m);
|
super.multiply(m);
|
||||||
|
|
||||||
qw *= m;
|
qw *= m;
|
||||||
qx += m;
|
qx *= m;
|
||||||
qy += m;
|
qy *= m;
|
||||||
qz += m;
|
qz *= m;
|
||||||
|
|
||||||
updateEulerAngles();
|
updateEulerAngles();
|
||||||
return this;
|
return this;
|
||||||
|
@ -130,4 +120,8 @@ public class LocationQuaternion extends Location {
|
||||||
LocationQuaternion cloned = new LocationQuaternion(this);
|
LocationQuaternion cloned = new LocationQuaternion(this);
|
||||||
return cloned;
|
return cloned;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double dot(LocationQuaternion q) {
|
||||||
|
return qx * q.qx + qy * q.qy + qz * q.qz + qw * q.qw;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue