Расчет эквидистантной точки по окружности эллипса - довольно сложная математическая задача. Кроме того, параллельная кривая (внутрь) для эллипса не является эллипсом.
Если ваш эллипс не слишком сжат (отношение a / b находится в диапазоне 0.5..2), вы можете использовать простое приближение через равноудаленное расстояние tпараметр эллиптического уравнения. В противном случае дисперсия расстояния будет слишком высокой, и вам потребуется более сложный подход на основе расчета длины дуги / расстояния (требуется числовое интегрирование).
[Редактировать]: я добавил некоторую коррекцию t, чтобы улучшить распределение точек. Идея взята отсюда ,
Используя уравнение параллельной кривой , мы можем рассчитать точки таким образом (код Delphi в качестве ссылки):
var
i, a, b, cx, cy, x, y, k, N: Integer;
sq, t: Double;
begin
N := 30; // Number of points
a := 120; //semiaxes
b := 200;
cx := 300; //center
cy:= 300;
k := 30; //inward distance
Canvas.Ellipse(cx - a, cy - b, cx + a, cy + b);
for i := 0 to N - 1 do begin
t := 2 * Pi * i / N;
//empirically adopted coefficient 0.3
t := t + 0.3 * ArcTan((a-b)*tan(t)/(a + b * sqr(tan(t))));
sq := 1.0 / Hypot(a * sin(t), b * cos(t));
x := Round(cx + (a - b * k * sq) * Cos(t));
y := Round(cy + (b - a * k * sq) * Sin(t));
Canvas.Ellipse(x-2,y-2,x+3,y+3);
end;