use 0 to 1 as coordinates, not working properly

This commit is contained in:
2025-01-09 20:06:37 +01:00
parent 0e5dd00816
commit 66c7ed2f23
3 changed files with 35 additions and 17 deletions

View File

@@ -22,10 +22,23 @@ class TrackerData:
x: float
y: float
# Convert from internal coordinates to actual scene coordinates
# Internal representation is float values from 0 to 1 for x and y
# Thus we need to know the max size and aspect ratio of the scene
# x is the width of the scene, y is the depth, z is the height
def pic_to_scene_coords(x, y):
scene_width = 8.0
scene_depth = 6.3
tracker_height = 0.8 + 1.5 # Scene height + height of person
x_val = x * scene_width - (scene_width / 2)
y_val = y * scene_depth
return x_val, y_val, tracker_height
def to_tracker(self):
tracker = psn.Tracker(self.id, f"Tracker {self.id}")
x, y = pic_to_scene_coords(self.x, self.y)
tracker.set_pos(psn.Float3(x, y, 0))
x, y, z = self.pic_to_scene_coords(self.x, self.y)
tracker.set_pos(psn.Float3(x, y, z))
return tracker
@@ -49,10 +62,6 @@ def get_elapsed_time_ms():
return get_time_ms() - START_TIME
def pic_to_scene_coords(x, y):
return x / 200, -y / 200
async def update_all_clients(app: web.Application, ws: web.WebSocketResponse = None):
for ws_send in app["ws_clients"]:
if ws_send == ws:

View File

@@ -23,6 +23,10 @@
ws = new WebSocket("/ws");
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
for (const tracker of data) {
tracker.x *= width
tracker.y *= height
}
trackers = data;
};

View File

@@ -19,15 +19,15 @@
let element: HTMLElement;
let vis_x = $state(0);
// let vis_x = $state(0);
let vis_y = $state(0);
// let vis_y = $state(0);
$effect(() => {
vis_x = x + width / 2 - (element.clientWidth ?? 0) / 2;
// $effect(() => {
// vis_x = x + width / 2 - (element.clientWidth ?? 0) / 2;
vis_y = y + height / 2 - (element.clientHeight ?? 0) / 2;
});
// vis_y = y + height / 2 - (element.clientHeight ?? 0) / 2;
// });
let capturedPointerId: number | null = $state(null);
@@ -45,14 +45,19 @@
e.preventDefault();
e.stopPropagation();
x = Math.min(width / 2, Math.max(-width / 2, x + e.movementX));
y = Math.min(height / 2, Math.max(-height / 2, y + e.movementY));
// x = Math.min(width / 2, Math.max(-width / 2, x + e.movementX));
// y = Math.min(height / 2, Math.max(-height / 2, y + e.movementY));
x = Math.min(width, Math.max(0, x + e.movementX));
y = Math.min(height, Math.max(0, y + e.movementY));
const x_send = x / width;
const y_send = y / height;
ws?.send(
JSON.stringify({
id,
x,
y,
x_send,
y_send,
}),
);
}
@@ -63,7 +68,7 @@
onpointerdown={onPointerDown}
onpointerup={onPointerUp}
onpointermove={onPointerMove}
style={`transform: translate(${vis_x}px, ${vis_y}px)`}
style={`transform: translate(${x}px, ${y}px)`}
class="absolute flex h-40 w-40 touch-none select-none items-center justify-center rounded-full border-red-400 bg-red-400"
>
Tracker {id}