вроде бы у такой задачки нет аналитического решения, только численно
вот эксперимент, попытка получить равноудаленные точки в прямоугольнике:
считаем, что все точки одинаково заряженные частицы и двигаем их в соответствии с силой отталкивания каждой от остальных и от стенок - должно бы устаканится, но реально что-то не очень..
но вообще как вариант может сработать, там enterFrame только для посмотреть, считать-то можно просто в цикле и останавливать при какой-то точности

Код AS3:
public class Main extends Sprite
{
private var rect:Rectangle = new Rectangle(50, 50, 400, 300);
private var points:Array /*Sprite*/ = [];
private var num:int = 48;
public function Main():void
{
this.graphics.lineStyle(0, 0x000000);
this.graphics.drawRect(rect.x, rect.y, rect.width, rect.height);
// частицы
for (var i:int = 0; i < num; i++)
{
var item:Sprite = new Sprite();
item.graphics.beginFill(0x0000FF);
item.graphics.drawCircle(0, 0, 10);
item.x = rect.x + rect.width * Math.random();
item.y = rect.y + rect.height * Math.random();
points.push(addChild(item));
}
// считаем-смотрим
this.addEventListener(Event.ENTER_FRAME, enterFrame);
}
private function enterFrame(event:Event):void
{
for (var i:int = 0; i < num; i++)
{
var item:Sprite = points[i];
var fX:Number = 0;
var fY:Number = 0;
var dX:Number;
var dY:Number;
var r:Number;
var fi:Number;
// отталкивание от других частиц
for (var j:int = i + 1; j < num; j++)
{
dX = points[j].x - item.x;
dY = points[j].y - item.y;
r = dX * dX + dY * dY;
fi = Math.atan2(dY, dX);
//сила отталкивания
fX += Math.cos(fi) / r;
fY += Math.sin(fi) / r;
}
// отталкивание от стенок
var d:Number = 3; // коефф. влияния стенок
fX -= d / (item.x - rect.left) / (item.x - rect.left);
fX += d / (item.x - rect.right) / (item.x - rect.right);
fY -= d / (item.y - rect.top) / (item.y - rect.top);
fY += d / (item.y - rect.bottom) / (item.y - rect.bottom);
var p:Number = 1e3;// * (1 + 0.2 * Math.random());
item.x -= p * fX;
item.y -= p * fY;
// проверка границ
if (item.x < rect.left)
item.x += 2 * (item.x - rect.left);
if (item.y < rect.top)
item.y += 2 * (item.y - rect.top);
if (item.x > rect.right)
item.x += 2 * (rect.right - item.x);
if (item.y > rect.bottom)
item.y += 2 * (rect.bottom - item.y);
}
}
}