There are two methods:

Method M1: The diameters of the semicircles have to be on the longer sides, starting at an endpoint of the rectangle. The two semicircles touch each other in the middle M of the rectangle

a

D|-----------------------|C

| | | |

b | . M | | | | |-------.---.-----------|

A R X B

R should be the center of the semicircle, and because of RA = RM,

it holds that

r^2 = (a/2 - r)^2 + (b/2)^2

Solving for r gives

r = min(b,(a^2+b^2)/(4a)), where a >= b.

Method M2: We'll cut on the line y = c x, where c will turn out to be slightly less than d, the slope of the diagonal. We describe the semicircle lying above the line y = c x, having this line as the straight part of the semi-circle. The center P of the semicircle will be taken on the line y = d - x, and will be tangent to the left and top of the rectangle. Clearly the lower down P is on this line, the better. The naive solution is not optimal because the upper place where the semicircle meets the diagonal is interior to the rectangle. So we try to determine c in such a way that this latter point actually lies slightly down from the top, on the right side of the rectangle. This involves solving the quartic:

4r^4 - (4a+16b)r^3 + (16b^2+a^2+8ab)r^2 - (6b^3+4ab^2+2ba^2)r + b^4+(ab)^2 = 0,

where r < b, the details of which will be left to the reader.

The other semicircle is the reflection of the first through the origin.

After a few calculations, we find that the value of r given by M2 is greater than the one given by M1 only if 1 < a/b < 2.472434.

lib/config.php:156: Notice: Undefined variable: accept

lib/DbaDatabase.php:134: Warning: dba_replace() [<a href='function.dba-replace'>function.dba-replace</a>]: You cannot perform a modification to a database without proper access