We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
Found this excellent explanation of line-to-line collision and many others.
boolean linesTouching(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4) { float denominator = ((x2 - x1) * (y4 - y3)) - ((y2 - y1) * (x4 - x3)); float numerator1 = ((y1 - y3) * (x4 - x3)) - ((x1 - x3) * (y4 - y3)); float numerator2 = ((y1 - y3) * (x2 - x1)) - ((x1 - x3) * (y2 - y1)); // Detect coincident lines (has a problem, read below) if (denominator == 0) return numerator1 == 0 && numerator2 == 0; float r = numerator1 / denominator; float s = numerator2 / denominator; return (r >= 0 && r <= 1) && (s >= 0 && s <= 1); }
PVector lineIntersection(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4) { // calculate the distance to intersection point float uA = ((x4-x3)*(y1-y3) - (y4-y3)*(x1-x3)) / ((y4-y3)*(x2-x1) - (x4-x3)*(y2-y1)); float uB = ((x2-x1)*(y1-y3) - (y2-y1)*(x1-x3)) / ((y4-y3)*(x2-x1) - (x4-x3)*(y2-y1)); // if uA and uB are between 0-1, lines are colliding if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1) { return new PVector(x1 + (uA * (x2-x1)), y1 + (uA * (y2-y1))); } return null; }