From 2e17234daf48d127f5563924ba40ac8b69c86ea6 Mon Sep 17 00:00:00 2001 From: Catalin Constantin Mititiuc Date: Tue, 20 Jan 2026 16:46:10 -0800 Subject: [PATCH] WIP: Velocity while in contact with edge --- html/images/space.svg | 83 ++++++++----------------------------------- 1 file changed, 15 insertions(+), 68 deletions(-) diff --git a/html/images/space.svg b/html/images/space.svg index ad1c525..9d34f0e 100644 --- a/html/images/space.svg +++ b/html/images/space.svg @@ -125,7 +125,7 @@ - + @@ -493,34 +493,18 @@ const Move = (() => { console.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); let posP; const contact = contacts[0]; + if (contact.corner) { - posP = cornerContactPosition(p.x, p.y, px, py, contact.corner, s.radius); + Velocity[entity_id] = { x: 0, y: 0 }; + Position[entity_id] = cornerContactPosition(p.x, p.y, px, py, contact.corner, s.radius); } else if (contact.edge) { // if (isLandable(contact.edge) && s.gearDown) s.isLanded = true; - // console.log("contact", contact); - // posP = edgeContactPosition(p.x, p.y, px, py, contact.edge, s.radius); - // console.log("position calculated by edgeContactPosition", posP); - posP = contact.position; - - // console.log("edge contact position current", posP); - // const velBeforeColl = { vx: Velocity[entity_id].x, vy: Velocity[entity_id].y }; - - // console.log("velocity before collision", velBeforeColl); - - const { xa, ya, xb, yb } = contact.edge; - - const positionSeg = { x1: px, y1: py, x2: p.x, y2: p.y }; - const edgeSeg = { x1: xa, y1: ya, x2: xb, y2: yb }; - console.log("CURRENT POSITION", px, py); console.log("INTENDED POSITION", p.x, p.y); console.log("CONTACT POSITION", contact.position); - // if (px === posP.x && py === posP.y) { - // const m1 = slope({ xa: px, ya: py, xb: p.x, yb: p.y }); - if (contact.edge.ya === contact.edge.yb && contact.edge.xa < contact.edge.xb) { - console.log("ON A FLAT EDGE"); - // Velocity[entity_id] = { x: velX, y: velY }; + if (contact.edge.ya === contact.edge.yb) { + if (contact.edge.xa < contact.edge.xb) { if (v.y <= 0) { Velocity[entity_id] = { x: v.x, y: v.y }; Position[entity_id] = { x: p.x, y: p.y }; @@ -528,54 +512,17 @@ const Move = (() => { Velocity[entity_id] = { x: v.x, y: 0 }; Position[entity_id] = { x: p.x, y: contact.position.y }; } - // Velocity[entity_id].x = v.x; - - // Position[entity_id] = { x: p.x, y: p.y }; + } else if (contact.edge.xa > contact.edge.xb) { + if (v.y <= 0) { + Velocity[entity_id] = { x: v.x, y: 0 }; + Position[entity_id] = { x: p.x, y: contact.position.y }; + } else if (v.y > 0) { + Velocity[entity_id] = { x: v.x, y: v.y }; + Position[entity_id] = { x: p.x, y: p.y }; + } } - // const m1 = slope({ xa: vx, ya: vy, xb: v.x, yb: v.y }); - // const m2 = slope(contact.edge); - // const m2 = 1/-slope(contact.edge); //normal?? - - // we need the angle between the velocity and normal vector, no? - - // const theta = Math.atan((m1-m2) / (1+m2*m2)); - // const velX = v.x * Math.sin(theta); - // const velY = v.y * Math.cos(theta); - // console.log("vvvvvvvvvvvvvvvvvvvv", v); - // console.log("theta", theta); - - // console.log("theta", theta, "velX", velX.toFixed(15), "velY", velY.toFixed(15)); - - // i need the normal force to push back - - // Velocity[entity_id] = { x: velX, y: velY }; - // Position[entity_id] = { x: p.x, y: p.y }; - // } else { - // Velocity[entity_id] = { x: 0, y: 0 }; - // Position[entity_id] = { x: posP.x, y: posP.y }; - // } - - // console.log("POSITIONSEG", positionSeg); - // console.log("EDGESEG", edgeSeg); + } } - - // we need to map velocity in segments - // Velocity[entity_id] = { x: 0, y: 0 }; - // Position[entity_id] = { x: posP.x, y: posP.y }; - - // s.node.style.transform = `translate(${Position[entity_id].x}px, ${Position[entity_id].y}px)`; - // } else if (current && s.collision) { - // console.log("2222222222222222222222222222222"); - - // if (s.isLanded && s.velocity.y < 0) { - // s.gearDown = false; - // s.isLanded = false; - // s.position = { x: p.x, y: p.y }; - // s.node.style.transform = `translate(${s.position.x}px, ${s.position.y}px)`; - // s.collision = null; - // } else { - // s.velocity = { x: 0, y: 0 }; - // } } else { Velocity[entity_id] = { x: v.x, y: v.y }; Position[entity_id] = { x: p.x, y: p.y };