title: Triangle-triangle intersection detection
body: <p>I'm working on a triange-triangle detection algorithm using <a href="http://www.applet-magic.com/trintersection.htm" rel="nofollow">this</a> article. I wrote this code, but unfortunetaly the method is returning false when there is an intersection between triangles.</p>
  
  <pre><code>private boolean checkTriangleCollision(Triangle triangle1, Triangle triangle2) {
      Vector3f n1 = getN(triangle1);
      Vector3f n2 = getN(triangle2);
      Vector3f v = null;
      v = Vector3f.cross(n1, n2, v);
  
      Vector3f p = new Vector3f();
  
      float pxy = n1.z * triangle1.vertex1.position.z * n1.x * n1.y;
      float px = n1.z * triangle1.vertex1.position.z * n1.x * n1.y * triangle1.vertex1.position.y;
      float py = n1.z * triangle1.vertex1.position.z * n1.x * triangle1.vertex1.position.x * n1.y;
      float p0 = n1.z * triangle1.vertex1.position.z * n1.x * triangle1.vertex1.position.x * n1.y * triangle1.vertex1.position.y;
  
      p.x = (p0/(px/pxy))/pxy;
      p.y = (p0/(py/pxy))/pxy;
  
      Vector3f x = null;
      x = Vector3f.add(p, v, x);
  
      Vector3f xq1 = null;
      xq1 = Vector3f.sub(x, triangle1.vertex1.position, xq1);
      float i1 = Vector3f.dot(xq1, n1);
  
      Vector3f xq2 = null;
      xq2 = Vector3f.sub(x, triangle2.vertex1.position, xq2);
      float i2 = Vector3f.dot(xq2, n2);
  
      if (i1 == 0 &amp;&amp; i2 == 0) {
          return true;
      }
      return false;
  }
  
  private Vector3f getN(Triangle triangle) {
      Vector3f vn1 = null;
      vn1 = Vector3f.sub(triangle.vertex2.position, triangle.vertex1.position, vn1);
      Vector3f vn2 = null;
      vn2 = Vector3f.sub(triangle.vertex3.position, triangle.vertex1.position, vn2);
      Vector3f n = null;
      n = Vector3f.cross(vn1, vn2, n);
      return n;
  }
  </code></pre>
  
  <p>I don't exactly know why, but i guess that the problem is at calculating <code>p</code>. If yes, than how can i solve this equation by code?</p>
  
  <pre><code>N1·(P0-Q1) = 0 
  and
  N2·(P0-R1) = 0 
  </code></pre>