public class UserRelativityTracker {
private final static int minimalSliceFactor = 5;
+
+ /**
+ * Points to 0, 0, 0 in object own relative space.
+ */
public Vertex center = new Vertex();
+
+ /**
+ * Points to 10, 0, 0 in object own relative space if orientation tracking is enabled.
+ * It is used to determine the angle between the user and the object.
+ */
public Vertex right;
+
+ /**
+ * Points to 0, 10, 0 in object own relative space if orientation tracking is enabled.
+ * It is used to determine the angle between the user and the object.
+ */
public Vertex down;
public UserRelativityTracker() {
center.calculateLocationRelativeToViewer(transformPipe, renderingContext);
- if (right != null) {
+ if (right != null) { // If orientation tracking is enabled.
right.calculateLocationRelativeToViewer(transformPipe, renderingContext);
down.calculateLocationRelativeToViewer(transformPipe, renderingContext);
}
}
+ /**
+ * Initializes the orientation tracking.
+ * Orientation tracking is used to determine the angle between the user and the object.
+ * Orientation tracking is disabled by default and it is optional.
+ */
public void enableOrientationTracking() {
right = new Vertex(new Point3D(10, 0, 0));
down = new Vertex(new Point3D(0, 10, 0));
}
+ /**
+ * Calculates the angle between the user and the object in the XY plane.
+ * @return the angle between the user and the object in the XY plane.
+ */
public double getAngleXY() {
return center.transformedCoordinate
.getAngleXY(down.transformedCoordinate);
}
+ /**
+ * Calculates the angle between the user and the object in the XZ plane.
+ * @return the angle between the user and the object in the XZ plane.
+ */
public double getAngleXZ() {
return center.transformedCoordinate
.getAngleXZ(right.transformedCoordinate);
}
+ /**
+ * Calculates the angle between the user and the object in the YZ plane.
+ * @return the angle between the user and the object in the YZ plane.
+ */
public double getAngleYZ() {
return center.transformedCoordinate
.getAngleYZ(down.transformedCoordinate);
}
+ /**
+ * Calculates the distance between the user and the object.
+ * Distance to the user can be used to determine object detail level.
+ */
public double getDistanceToUser() {
return center.transformedCoordinate.getVectorLength();
}