// circle radius equation r = sqrt(3) / 3 * a
BigDecimal radius = BigDecimal.valueOf((Math.sqrt(3) / 3) * triangle.getEdgeList().get(0).getWeight().doubleValue());
// we need two edges for center point finding
WeightedEdge firstEdge = triangle.getEdgeList().get(0);
WeightedEdge secondEdge = triangle.getEdgeList().get(1);
// find middle-edge edges
WeightedEdge firstMiddleEdge = getMiddleEdge(firstEdge, secondEdge);
WeightedEdge secondMiddleEdge = getMiddleEdge(secondEdge, firstEdge);
LinearFunctionParameters firstEdgeParameters = getLinearFunctionParameters(firstMiddleEdge.getStart(), firstMiddleEdge.getEnd());
LinearFunctionParameters secondEdgeParameters = getLinearFunctionParameters(secondMiddleEdge.getStart(), secondMiddleEdge.getEnd());
BigDecimal centerX = null;
BigDecimal centerY = null;
// special case when one of the edges is vertical
if (firstEdgeParameters.getDx().compareTo(BigDecimal.ZERO) == 0) {
centerX = firstMiddleEdge.getStart().getPointX();
centerY = secondEdgeParameters.getK()
.multiply(centerX)
.add(secondEdgeParameters.getB());
} else if (secondEdgeParameters.getDx().compareTo(BigDecimal.ZERO) == 0 ) {
centerX = secondMiddleEdge.getStart().getPointX();
centerY = firstEdgeParameters.getK()
.multiply(centerX)
.add(firstEdgeParameters.getB());
} else {
// x = (b2 - b1) / ( k1 - k2 )