Does the mean area of triangles with equal perimeter $p$ and circumradius $R$ have a local minima at $p=4R$?

85 Views Asked by At

Definition: Isoperimetric triangles are triangles which have the same perimeter and the same circumradius.

Isoperimetric area curve: The largest perimeter of a triangle that can be inscribed in a circle of radius $R$ is $3\sqrt{3}R$ for a equilateral triangle. For each value of $p, 0 < p \le 3\sqrt{3}R$, I generated several random triangles such that their perimeter $\approx p$ and calculated their average area $A_p$. From an experimental point of view it is very rare to get two random triangles with the exact same perimeter hence I took an approximation where all triangles whose perimeter fell within $(0.9999,1.00001)$ are assumed to have perimeter $p$. I repeated the experiment with different distributions such as uniform, gaussian etc. to generate random points on the circumference of the circle for the triangles and got similar mean areas so it seems that the average area is independent of the distribution. The graph between the perimeter $p$ and the mean area is shown below.

enter image description here

Observation: As $p$ increases, the mean area increase following a concave curve. But this pattern suddenly breaks. There seems to be a point of inflection just before $p=4R$, then it drops to a local minina at about $p = 4R$ after which the mean area increases linearly to the maximum value of $\frac{3 \sqrt{3}}{4}R^2 \approx 1.299 R^2$ which corresponds the maximum area of a triangle (equilateral) that can be inscribed in a circle of radius $R$.

Question: I have three interrelated questions:

  1. Does the mean area of isoperimetric triangles have a local minima at $p=4R$?
  2. Where exactly is the point of inflection?
  3. Why is the graph a become almost linear after $p = 4R$

Source Code:

import random as rn
import math
from datetime import datetime
import numpy as np
rng = np.random.default_rng()

# Function to calculate the area of a triangle given its vertices
def triangle_area(x1, y1, x2, y2, x3, y3):
    return 0.5 * abs(x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2))

# Function to calculate the perimeter of a triangle given its vertices
def triangle_perimeter(x1, y1, x2, y2, x3, y3):
    side1 = math.sqrt((x2 - x1)**2 + (y2 - y1)**2)
    side2 = math.sqrt((x3 - x2)**2 + (y3 - y2)**2)
    side3 = math.sqrt((x1 - x3)**2 + (y1 - y3)**2)
    return side1 + side2 + side3

theta1 = 0
k = 2 * math.pi
accuracy = 0.9999
samples = 10000
R = 1.5
max_perimeter = 5.19615242270663*R
fixed_perimeter = max_perimeter

while fixed_perimeter >= 0.01:
    fp = 0
    total_perimeter = total_area = 0
    lower = fixed_perimeter*accuracy
    upper = fixed_perimeter/accuracy
    prev_time_a = prev_time_p = datetime.now()
    
    while fp < samples:
        theta2 = k * rn.random()
        theta3 = k * rn.random()
#         theta2 = k * rng.random() # for normally distibuted random numbers
#         theta3 = k * rng.random() # for normally distibuted random numbers
        x1 = R*math.cos(theta1)
        y1 = R*math.sin(theta1)
        x2 = R*math.cos(theta2)
        y2 = R*math.sin(theta2)
        x3 = R*math.cos(theta3)
        y3 = R*math.sin(theta3)
        
        perimeter = triangle_perimeter(x1, y1, x2, y2, x3, y3)

        # Fixed perimeter mean area
        if lower <= perimeter <= upper:
            area = triangle_area(x1, y1, x2, y2, x3, y3)
            total_area = total_area + area
            fp = fp + 1
            
    curr_time = datetime.now()
    print('peri', round(fixed_perimeter,4), total_area / fp, curr_time - prev_time_p)
    prev_time_p = curr_time
    fixed_perimeter = fixed_perimeter - 0.001*R

Note: The code is slow so if you do not have a powerful machine you can reduce the parameters accuracy and samples in make it run faster. This will reduce the accuracy of estimation a bit but the overall observation remains consistent.

1

There are 1 best solutions below

0
On

Partial Answer: Here are some thoughts in case they help.

The mean area of triangles with equal perimeter $\textbf{p}$ and circumradius $\textbf{R}$ can be analytically expressed as, $$\frac{\int_{S^*} A(\Delta \theta_2, \Delta \theta_3) dS}{\int_{S^*} dS}\\ A(\Delta \theta_2, \Delta \theta_3) \equiv 2\textbf{R}^2 \sin \left(\frac{\Delta \theta_2}{2}\right) \sin \left(\frac{\Delta \theta_3}{2}\right) \sin \left(\frac{2\pi - \Delta \theta_2 - \Delta \theta_3}{2}\right) \\ S^* \equiv \left\lbrace (\Delta \theta_2, \Delta \theta_3) | 0 \leq \Delta \theta_2, \Delta \theta_3 \leq 2\pi; 0 \leq \Delta \theta_2 + \Delta \theta_3 \leq 2\pi; \sin \left(\frac{\Delta \theta_2}{2}\right) + \sin \left(\frac{\Delta \theta_3}{2}\right) + \sin \left(\frac{2\pi - \Delta \theta_2 - \Delta \theta_3}{2}\right) = \frac{\textbf{p}}{2\textbf{R}} \right\rbrace $$

The perimeter constraint can also be expressed as below. $\Delta \theta$ can be calculated from $\phi$ afterwards. $$\sum_{i=1}^3 \sin \phi_i = \frac{\textbf{p}}{2\textbf{R}},\quad \sum_{i=1}^3 \phi_i = \pi, \quad \phi_i \geq 0 $$

$\frac{\textbf{p}}{2\textbf{R}} = 2$ being a special point in your numerical runs could be related to the distribution of sum of sines. For example, we have an upper bound of $\sum_{i=1}^3 \sin \phi_i \leq 3$, but this can never be achieved due to $\sum_{i=1}^3 \phi_i = \pi$.

Steps Used:

  • The average of a one-dimensional function is, $$ \frac{\int f(x) dx}{\int dx} $$

  • The angles inscribed by the triangle sides with the circumcentre are, $$\Delta \theta_2 \equiv \theta_2 - \theta_1,\quad \Delta \theta_3 = \theta_3 - \theta_2,\quad 2\pi - \Delta \theta_2 - \Delta \theta_3$$

  • Length of a chord inscribing angle $\theta$ at centre of a circle is, $$2R \sin \left(\frac{\theta}{2}\right)$$

  • Area of circle is, $$\frac{abc}{4R}$$

Generating Triangles:

As an aside, if you want to guarantee the generated triangles exactly satisfy the perimeter, you can do the following. Though it's arguable whether the additional benefit of preciseness is worth the complexity compared to your current approach.

  1. Fix $\theta_1 = 0$ to fix the first vertex on the circle.
  2. Choose $\theta_2$ from $$\theta_1 \leq \theta_2 \leq \theta_1 + 2 \arcsin \left(\min\left(\frac{p}{2R},1\right)\right)$$ with $\arcsin$ in the first quadrant (usually the default function) to choose the second vertex, since side $V_1V_2$ has length $2R \sin \left(\frac{|\theta_2 - \theta_1|}{2} \right)$. Excluding $\theta_2 < \theta_1$ due to symmetry.
  3. Choose $\theta_3$ from $$\theta_2 \leq \theta_3 \leq \theta_2 + \min \left( 2 \arcsin \left(\min\left(\frac{p - 2R \sin \left(\frac{\theta_2 - \theta_1}{2} \right)}{2R},1\right)\right), \frac{2\pi -(\theta_2 - \theta_1)}{2} \right)$$ to choose the third vertex, excluding the other valid combinations of $\theta$ due to symmetry.