WIP: position after a collision
This commit is contained in:
@@ -424,6 +424,13 @@
|
||||
});
|
||||
}
|
||||
|
||||
function perpIntxn(baseSlope, xa, ya, xc, yc) {
|
||||
const altitudeSlope = 1 / -baseSlope;
|
||||
const isx = (-altitudeSlope * xc + yc + baseSlope * xa - ya) / (baseSlope - altitudeSlope);
|
||||
const isy = altitudeSlope * isx - altitudeSlope * xc + yc;
|
||||
return { x: isx, y: isy };
|
||||
}
|
||||
|
||||
function drawLine(xa, ya, xb, yb) {
|
||||
const el = document.createElementNS(namespaceURIsvg, 'line');
|
||||
el.setAttribute('x1', xa);
|
||||
@@ -455,40 +462,28 @@
|
||||
|
||||
const baseSlope = slope({ xa, ya, xb, yb });
|
||||
|
||||
console.log("slope of base", baseSlope);
|
||||
// console.log("slope of base", baseSlope);
|
||||
|
||||
if (baseSlope === -Infinity) {
|
||||
console.log("foot", xa + shipRadius, yc);
|
||||
// console.log("foot", xa + shipRadius, yc);
|
||||
} else if (baseSlope === Infinity) {
|
||||
console.log("foot", xa - shipRadius, yc);
|
||||
// console.log("foot", xa - shipRadius, yc);
|
||||
} else if (Object.is(baseSlope, 0)) {
|
||||
console.log("foot", xc, ya - shipRadius);
|
||||
// console.log("foot", xc, ya - shipRadius);
|
||||
} else if (Object.is(baseSlope, -0)) {
|
||||
console.log("foot", xc, ya + shipRadius);
|
||||
// console.log("foot", xc, ya + shipRadius);
|
||||
} else {
|
||||
console.log(xa, ya, xb, yb);
|
||||
// 10, 40, 20, 20
|
||||
// altitude slope (perpendicular of base)
|
||||
const altitudeSlope = 1 / -baseSlope;
|
||||
// point-slope formula
|
||||
// y - ya = baseSlope * (x - xa)
|
||||
// line equation of the base
|
||||
// y = baseSlope * x - baseSlope * xa + ya
|
||||
// y = -2x - (-2 * 10) + 40
|
||||
// point-slope formula
|
||||
// y - yc = altitudeSlope * (x - xc)
|
||||
// line equation of the altitude
|
||||
// y = altitudeSlope * x - altitudeSlope * xc + yc
|
||||
|
||||
// test point c 0, 20
|
||||
|
||||
// baseSlope * x - baseSlope * xa + ya = altitudeSlope * x - altitudeSlope * xc + yc
|
||||
// baseSlope * x - altitudeSlope * x = -altitudeSlope * xc + yc + baseSlope * xa - ya
|
||||
const isx = (-altitudeSlope * xc + yc + baseSlope * xa - ya) / (baseSlope - altitudeSlope);
|
||||
const isy = altitudeSlope * isx - altitudeSlope * xc + yc;
|
||||
// should be (35, 30)
|
||||
console.log("foot coords", isx, isy);
|
||||
drawLine(isx, isy, xc, yc);
|
||||
const foot = perpIntxn(baseSlope, xa, ya, xc, yc);
|
||||
// console.log("foot", foot);
|
||||
// drawLine(foot.x, foot.y, xc, yc)
|
||||
const el = document.createElementNS(namespaceURIsvg, 'line');
|
||||
el.setAttribute('x1', foot.x);
|
||||
el.setAttribute('y1', foot.y);
|
||||
el.setAttribute('x2', xc);
|
||||
el.setAttribute('y2', yc);
|
||||
// this point should be the position of the ship to make it
|
||||
// adjacent to the collision edge without overlapping it
|
||||
console.log(el.getPointAtLength(5));
|
||||
}
|
||||
|
||||
// https://en.wikipedia.org/wiki/Altitude_(triangle)#Altitude_in_terms_of_the_sides
|
||||
@@ -584,7 +579,7 @@
|
||||
console.log("a", "position", position, s.position);
|
||||
s.velocity = { x: 0, y: 0 };
|
||||
} else if (s.collision) {
|
||||
console.log("b", position, s.position);
|
||||
console.log("b", s.position, s.collision);
|
||||
|
||||
s.velocity = { x: 0, y: 0 };
|
||||
s.position.y = Math.trunc(s.collision.edge.ya - 5);
|
||||
|
||||
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Reference in New Issue
Block a user