diff --git a/html/images/space.svg b/html/images/space.svg index bcd1c47..c0e1b93 100644 --- a/html/images/space.svg +++ b/html/images/space.svg @@ -244,17 +244,17 @@ const Move = (() => { // https://en.wikipedia.org/wiki/Curve_orientation#Practical_considerations // Determinant for a convex polygon - // const det = (xb - xa) * (yc - ya) - (xc - xa) * (yb - ya); + const det = (xb - xa) * (yc - ya) - (xc - xa) * (yb - ya); - const subR = (a, b) => Math.round(a * 100 - b * 100) / 100; - - const xba = subR(xb, xa); - const yca = subR(yc, ya); - const xca = subR(xc, xa); - const yba = subR(yb, ya); - - const det = subR(xba * yca, xca * yba); - console.log("dett", det, "edge", xa, ya, xb, yb, "position", xc, yc); + // const subR = (a, b) => Math.round(a * 100 - b * 100) / 100; + // + // const xba = subR(xb, xa); + // const yca = subR(yc, ya); + // const xca = subR(xc, xa); + // const yba = subR(yb, ya); + // + // const det = subR(xba * yca, xca * yba); + console.log("dett", det, "edge", xa, ya, xb, yb, "position", xc, yc, "aaa"); // console.log("xa, ya, xb, yb, xc, yc", xa, ya, xb, yb, xc, yc); // const detEx = (xb*expo - xa*expo) * (yc*expo - ya*expo) - (xc*expo - xa*expo) * (yb*expo - ya*expo); @@ -289,7 +289,7 @@ const Move = (() => { // console.log(xb, xa, yc, ya, xc, xa, yb, ya); // console.log("dettttttttttttttttttttt", det); // if det == 0, that means we are in contact with that edge - return det <= 0; + return det < 0; } function isAcute([xa, ya], [xb, yb], [xc, yc]) { @@ -508,9 +508,20 @@ const Move = (() => { // console.log("s", s, "roundedS", roundedS, "t", t, "roundedT", roundedT); console.log("s", s, "t", t); console.log("sr", sr, "tr", tr); + const x1r = Math.round(x1 * 100); + const x2r = Math.round(x2 * 100); + const y1r = Math.round(y1 * 100); + const y2r = Math.round(y2 * 100); + const x3r = Math.round(x3 * 100); + const x4r = Math.round(x4 * 100); + const y3r = Math.round(y3 * 100); + const y4r = Math.round(y4 * 100); + // 2.03 * 10 // 20.299999999999997 + const xsrOff = Math.round(x1r + (sr + 1) * (x2r - x1r)) / 100; + const ysrOff = Math.round(y1r + (sr + 1) * (y2r - y1r)) / 100; // if (roundedS >= 0 && roundedS <= 1 && roundedT >= 0 && roundedT <= 1) { // if (s >= 0 && s < 1 && t >= 0 && t <= 1) { // this falls through @@ -528,17 +539,10 @@ const Move = (() => { console.log("x1", x1, "x2", x2); console.log("y1", y1, "y2", y2); - const x1r = Math.round(x1 * 100); - const x2r = Math.round(x2 * 100); - const y1r = Math.round(y1 * 100); - const y2r = Math.round(y2 * 100); - const x3r = Math.round(x3 * 100); - const x4r = Math.round(x4 * 100); - const y3r = Math.round(y3 * 100); - const y4r = Math.round(y4 * 100); - const xsr = Math.round(x1r + sr * (x2r - x1r)) / 100; const ysr = Math.round(y1r + sr * (y2r - y1r)) / 100; + + const xtr = Math.round(x3r + tr * (x4r - x3r)) / 100; const ytr = Math.round(y3r + tr * (y4r - y3r)) / 100; @@ -555,7 +559,8 @@ const Move = (() => { const lnP = ln.getPointAtLength(lnD); // collision.position = { x: xs, y: ys }; - collision.position = { x: xsr, y: ysr }; + // collision.position = { x: xsr, y: ysr }; + collision.position = { x: xsrOff, y: ysrOff }; // collision.position = { x: xtr, y: ytr }; // collision.position = lnP; @@ -912,8 +917,8 @@ const Move = (() => { }; console.log("reflection before rounding", refP, "aaa"); - refP.x = Math.round(refP.x * 100) / 100; - refP.y = Math.round(refP.y * 100) / 100; + // refP.x = Math.round(refP.x * 100) / 100; + // refP.y = Math.round(refP.y * 100) / 100; // shouldnt change isClockwise if isAcute isn't also changing // if we go from clockwise to not clockwise without changing acuteness, @@ -926,6 +931,7 @@ const Move = (() => { isA = isAcute([contact.edge.xa, contact.edge.ya], [contact.edge.xb, contact.edge.yb], [refP.x, refP.y]); console.log("is reflected position acute with current contact", isA, "aaa"); + // how close can you come to an edge without being on it? const inWall = contact.wall.node.isPointInFill(newP); console.log("is our calculated next position inside current edge's wall?", inWall, "dett"); @@ -1072,8 +1078,8 @@ function init() { // drawCircle(0, 0); // s.acceleration = { x: -1, y: 2 }; - s.acceleration = { x: -2, y: 2 }; - // s.acceleration = { x: 0, y: 0 }; + // s.acceleration = { x: -2, y: 2 }; + s.acceleration = { x: 0, y: 0 }; Ships.forEach(({ entity_id }) => { // Acceleration[entity_id] = s.acceleration;