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));