diff --git a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshTriangle.java b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshTriangle.java
index c2750aed83462b39410806a4e99431cb60ec7b0c..5df388a191fcb8850905f26ae81fc0933fae9f2b 100644
--- a/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshTriangle.java
+++ b/MeshModel/src/main/java/cz/fidentis/analyst/mesh/core/MeshTriangle.java
@@ -7,10 +7,9 @@ import java.util.NoSuchElementException;
 import javax.vecmath.Vector3d;
 
 /**
- *
- * @author Natália Bebjaková
+ * Adapter for the corner table representing a single triangle of {@code MeshFacet}.
  * 
- * Adapter for the corner table representing a single triangle of the @code{MeshFacet}.
+ * @author Natalia Bebjakova
  */
 
 public class MeshTriangle implements Iterable<MeshPoint> { 
@@ -112,6 +111,66 @@ public class MeshTriangle implements Iterable<MeshPoint> {
         };
     }
     
+    /**
+     * Return a center of circumcircle. This point represents the point
+     * of Voronoi area used for Delaunay triangulation, for instenace.
+     * 
+     * @return the center of circumcircle
+     */
+    public Vector3d getVoronoiPoint() {
+        double a = (vertex2.subtractPosition(vertex3)).abs();
+        double b = (vertex3.subtractPosition(vertex1)).abs();
+        double c = (vertex2.subtractPosition(vertex1)).abs();
+        
+        double d1 = a * a * (b * b + c * c - a * a);
+        double d2 = b * b * (c * c + a * a - b * b);
+        double d3 = c * c * (a * a + b * b - c * c);
+        double dSum = d1 + d2 + d3;
+        
+        d1 /= dSum;
+        d2 /= dSum;
+        d3 /= dSum;
+
+        MeshPoint v1Half = (vertex2.addPosition(vertex3)).dividePosition(2);
+        MeshPoint v2Half = (vertex1.addPosition(vertex3)).dividePosition(2);
+        MeshPoint v3Half = (vertex2.addPosition(vertex1)).dividePosition(2);
+
+        
+        if (d1 < 0) {           
+            double v3Area = ((v2Half.subtractPosition(vertex3)).crossProduct(v1Half.subtractPosition(vertex3))).abs() / 2.0;
+            double v2Area = ((v3Half.subtractPosition(vertex2)).crossProduct(v1Half.subtractPosition(vertex2))).abs() / 2.0;
+            double v1Area = (((v1Half.subtractPosition(vertex1)).crossProduct(v3Half.subtractPosition(vertex1))).abs() / 2.0) + 
+                    (((v1Half.subtractPosition(vertex1)).crossProduct(v2Half.subtractPosition(vertex1))).abs() / 2.0);
+            return new Vector3d(v1Area, v2Area, v3Area);
+        }
+        if (d2 < 0) {
+            double v1Area = ((v3Half.subtractPosition(vertex1)).crossProduct(v2Half.subtractPosition(vertex1))).abs() / 2.0;
+            double v3Area = ((v1Half.subtractPosition(vertex3)).crossProduct(v2Half.subtractPosition(vertex3))).abs() / 2.0;
+            double v2Area = (((v2Half.subtractPosition(vertex2)).crossProduct(v1Half.subtractPosition(vertex2))).abs() / 2.0) + 
+                    (((v2Half.subtractPosition(vertex2)).crossProduct(v3Half.subtractPosition(vertex2))).abs() / 2.0);
+            return new Vector3d(v1Area, v2Area, v3Area);
+        }
+        if (d3 < 0) {
+            double v2Area = ((v1Half.subtractPosition(vertex2)).crossProduct(v3Half.subtractPosition(vertex2))).abs() / 2.0;
+            double v1Area = ((v2Half.subtractPosition(vertex1)).crossProduct(v3Half.subtractPosition(vertex1))).abs() / 2.0;
+            double v3Area = (((v3Half.subtractPosition(vertex3)).crossProduct(v2Half.subtractPosition(vertex3))).abs() / 2.0) + 
+                    (((v3Half.subtractPosition(vertex3)).crossProduct(v1Half.subtractPosition(vertex3))).abs() / 2.0);
+            return new Vector3d(v1Area, v2Area, v3Area);
+        }
+        
+        MeshPoint circumcenter = vertex1.multiplyPosition(d1).addPosition(vertex2.multiplyPosition(d2).addPosition(vertex3.multiplyPosition(d3)));
+        
+        double v1Area = (((v2Half.subtractPosition(vertex1)).crossProduct(circumcenter.subtractPosition(vertex1))).abs() / 2.0) + 
+                (((v3Half.subtractPosition(vertex1)).crossProduct(circumcenter.subtractPosition(vertex1))).abs() / 2.0);
+        
+        double v2Area = (((v3Half.subtractPosition(vertex2)).crossProduct(circumcenter.subtractPosition(vertex2))).abs() / 2.0) +
+                (((v1Half.subtractPosition(vertex2)).crossProduct(circumcenter.subtractPosition(vertex2))).abs() / 2.0);
+        
+        double v3Area = (((v1Half.subtractPosition(vertex3)).crossProduct(circumcenter.subtractPosition(vertex3))).abs() / 2.0) +
+                (((v2Half.subtractPosition(vertex3)).crossProduct(circumcenter.subtractPosition(vertex3))).abs() / 2.0);
+        return new Vector3d(v1Area, v2Area, v3Area);
+    }
+    
     @Override
     public String toString() {
         String ret = "TRI {" + System.lineSeparator();