Added more logging for debugging functionality
This commit is contained in:
@@ -22,6 +22,8 @@ import org.joml.Vector2f;
|
|||||||
import org.joml.Vector3f;
|
import org.joml.Vector3f;
|
||||||
import org.joml.Vector4f;
|
import org.joml.Vector4f;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
@@ -44,6 +46,11 @@ public class PersonalMotionPreviewElement extends View {
|
|||||||
private final Paint targetPaint = new Paint();
|
private final Paint targetPaint = new Paint();
|
||||||
private final Paint backgroundColor = new Paint();
|
private final Paint backgroundColor = new Paint();
|
||||||
|
|
||||||
|
private Matrix4f modelViewMatrix = new Matrix4f(); // The model view matrix for the 3D to 2D transformation.
|
||||||
|
private Matrix4f projectionMatrix = new Matrix4f(); // The projection matrix for the 3D to 2D transformation.
|
||||||
|
private final Vector4f objectPosition = new Vector4f(0, 0, -1, 1); // The location of the object in 3D space.
|
||||||
|
private List<Vector2f> vectors = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
private static final String[] USER_PHRASES = {
|
private static final String[] USER_PHRASES = {
|
||||||
"Veel success met de oefening!",
|
"Veel success met de oefening!",
|
||||||
@@ -122,6 +129,8 @@ public class PersonalMotionPreviewElement extends View {
|
|||||||
int progress = (int)this.motionProcessor.getError(this.paths[0], processed);
|
int progress = (int)this.motionProcessor.getError(this.paths[0], processed);
|
||||||
this.exerciseProgress.set(Math.min(1000, Math.max(0, progress)));
|
this.exerciseProgress.set(Math.min(1000, Math.max(0, progress)));
|
||||||
Log.i("MotionProcessor", "Processed data: " + progress + " (" + preprocessed + ")");
|
Log.i("MotionProcessor", "Processed data: " + progress + " (" + preprocessed + ")");
|
||||||
|
Vector2f parsed = projectVertex(processed, this.getWidth(), this.getHeight());
|
||||||
|
this.vectors.add(parsed);
|
||||||
});
|
});
|
||||||
saySomethingNice();
|
saySomethingNice();
|
||||||
}
|
}
|
||||||
@@ -147,6 +156,31 @@ public class PersonalMotionPreviewElement extends View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private Vector2f projectVertex(Vector3f point, int virtualWidth, int virtualHeight) {
|
||||||
|
|
||||||
|
modelViewMatrix
|
||||||
|
.identity()
|
||||||
|
.translate(-objectPosition.x, -objectPosition.y, -objectPosition.z);
|
||||||
|
|
||||||
|
// Transform the projection matrix to a perspective projection matrix
|
||||||
|
// Perspective transformation conserves the depth of the object
|
||||||
|
projectionMatrix
|
||||||
|
.identity()
|
||||||
|
.perspective((float) Math.toRadians(70), (float) virtualWidth / virtualHeight, .01f, 10000.0f);
|
||||||
|
|
||||||
|
// Convert world coordinates to screen-space using MVP matrix
|
||||||
|
Vector4f screenCoordinates = new Vector4f(point, 1.0f)
|
||||||
|
.mul(this.modelViewMatrix)
|
||||||
|
.mul(this.projectionMatrix);
|
||||||
|
|
||||||
|
// Normalize screen coordinates from (-1, 1) to (0, virtualWidth) and (0, virtualHeight)
|
||||||
|
float normalizedX = (screenCoordinates.x / screenCoordinates.w + 1.0f) * 0.5f * virtualWidth;
|
||||||
|
float normalizedY = (1.0f - screenCoordinates.y / screenCoordinates.w) * 0.5f * virtualHeight;
|
||||||
|
return new Vector2f(normalizedX, normalizedY);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDraw(Canvas canvas) {
|
public void onDraw(Canvas canvas) {
|
||||||
canvas.drawRect(0, 0, getWidth(), getHeight(), backgroundColor);
|
canvas.drawRect(0, 0, getWidth(), getHeight(), backgroundColor);
|
||||||
@@ -154,6 +188,11 @@ public class PersonalMotionPreviewElement extends View {
|
|||||||
if (this.exercise == null)
|
if (this.exercise == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
for ( Vector2f point : this.vectors)
|
||||||
|
{
|
||||||
|
canvas.drawRect(point.x, point.y, point.x + 5, point.y + 5, this.referencePaint);
|
||||||
|
}
|
||||||
|
/*
|
||||||
// Draw target circle
|
// Draw target circle
|
||||||
float targetRadius = (this.screenDimensions.x + this.screenDimensions.y) / 5.0f;
|
float targetRadius = (this.screenDimensions.x + this.screenDimensions.y) / 5.0f;
|
||||||
canvas.drawCircle(this.screenDimensions.x / 2, this.screenDimensions.y / 2, targetRadius, this.targetPaint);
|
canvas.drawCircle(this.screenDimensions.x / 2, this.screenDimensions.y / 2, targetRadius, this.targetPaint);
|
||||||
@@ -165,7 +204,7 @@ public class PersonalMotionPreviewElement extends View {
|
|||||||
(int)(255 * exerciseProgress.get()/1000.0f),
|
(int)(255 * exerciseProgress.get()/1000.0f),
|
||||||
0
|
0
|
||||||
)
|
)
|
||||||
);
|
);*/
|
||||||
|
|
||||||
this.invalidate();
|
this.invalidate();
|
||||||
|
|
||||||
|
@@ -108,7 +108,6 @@ public class MotionProcessor {
|
|||||||
|
|
||||||
addMotionData(motionData);
|
addMotionData(motionData);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// Don't do anything ... just ignore the exception
|
|
||||||
Log.i("MotionProcessor", "Failed to parse packet data.");
|
Log.i("MotionProcessor", "Failed to parse packet data.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user