diff --git a/sirius.cpp b/sirius.cpp index 9ea5f62c54536e5a03735ed7e331ad09c2729957..7e4da9549e45508c455c456482ff24e67129a5d4 100644 --- a/sirius.cpp +++ b/sirius.cpp @@ -206,10 +206,15 @@ inline float crossv2(vec2 a, vec2 b) { return a.x * b.y - a.y * b.x; } +inline bool onDifferentSides(vec2 p1, vec2 p2, vec2 q1, vec2 q2) { + vec2 v = p2-p1; + vec2 r = p1; + return lengthv2(crossv2(v, p1 - r) * crossv2(v, p2 - r)) < 0; +} + inline bool intersectEachOther(vec2 p1, vec2 p2, vec2 q1, vec2 q2) { return - lengthv2(crossv2(q1 - q2, p1 - q1)) * lengthv2(crossv2(q1 - q2, p2 - q1)) < 0 && - lengthv2(crossv2(q1 - q2, p1 - q1)) * lengthv2(crossv2(q1 - q2, p2 - q1)) < 0; + onDifferentSides(p1, p2, q1, q2) && onDifferentSides(q1, q2, p1, p2); } class Triangulated : public Drawable { @@ -232,7 +237,6 @@ public: //check if current potential diagonal intersects any edges // skipping edges that share a vertex with it - for (auto currEdgeStart = getPreviousVertex(getPreviousVertex(currVertex)); currEdgeStart != getNextVertex(getNextVertex(currVertex)); currEdgeStart = getPreviousVertex(currEdgeStart)) if (intersectEachOther(vec2(currEdgeStart->x, currEdgeStart->y), @@ -276,6 +280,7 @@ public: void draw() override { init(); glBindVertexArray(vao); // Draw call + setColor(vec3(0,1,0)); glDrawArrays(GL_TRIANGLES, 0, vertices.size()); } }; @@ -392,6 +397,13 @@ SiriusTriangleManager siriusTriangleManager = SiriusTriangleManager(); void onInitialization() { glViewport(0, 0, windowWidth, windowHeight); + printf("%d", intersectEachOther( + vec2(0, 0), + vec2(100,0), + vec2(2, 2), + vec2(2, -4) + )); + baseCircle.init(); siriusTriangleManager.addPoint(vec2(-0.6, 0.4)); siriusTriangleManager.addPoint(vec2(-0.8, -0.2));