diff options
Diffstat (limited to 'frontend/_shared/math/collision.js')
-rw-r--r-- | frontend/_shared/math/collision.js | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/frontend/_shared/math/collision.js b/frontend/_shared/math/collision.js index 74ec5d8..8e4be7d 100644 --- a/frontend/_shared/math/collision.js +++ b/frontend/_shared/math/collision.js @@ -2,22 +2,25 @@ /// <reference path="line2.js" /> /// <reference path="circle.js" /> /// <reference path="mat4.js" /> +/// <reference path="point2.js" /> /** * - * @param {circle} pCricle + * @param {circle} pCircle * @param {line2} pLine */ -function lineCircleCollision2(pCricle, pLine) { - // We have a triangle formed by circle's position P and the two points of the line, A and B. - var lSlope = (pCricle.position.y - pLine.start.y) / (pCricle.position.x - pLine.start.x), - lAngle = Math.atan(lSlope), - lAngleDiff = lAngle - pLine.angle, - lPositionToStart = subVec2(pCricle.position, pLine.start), - lPosToStartLength = length2(lPositionToStart), - lHeight = lPosToStartLength * Math.sin(lAngleDiff); +function lineCircleCollision2(pCircle, pLine) { + return distanceFromPoint2ToLine2(pCircle.position, pLine) <= pCircle.radius; +} - if (Math.abs(lHeight - pCricle.radius) < pCricle.radius) { - console.log('Intersection'); +function getLineCircleCollison2Data(pCircle, pLine) { + const lCollisionNormal = pLine.normal, + lCollisionPoint = addVec2(pCircle.position, scaleVec2(negate2(lCollisionNormal), pCircle.radius)); + + return { + relativeVelocity: subVec2(pCircle.velocity, pLine.velocity), + collisionNormal: lCollisionNormal, + firstPointOfApplication: subVec2(lCollisionPoint, pCircle.position), + secondPointOfApplication: subVec2(lCollisionPoint, pLine.start) } }
\ No newline at end of file |