Похоже, вы разместили свое трехмерное перспективное преобразование. Самое простое, если круг не вращается:
class Circle
{
public var radius:Number;
public var position:Vector3d;
public function Circle(_radius:Number, _position:Vector3d)
{
radius = _radius;
position = _position;
}
}
var circ:Circle = new Circle(100, new Vector3d(1, 2, 3));
var leftMost:Vector3d = new Vector3d(circ.x - circ.radius, circ.y);
var rightMost:Vector3d = new Vector3d(circ.y + circ.radius, circ.y);
Если вы вращаете окружность вдоль оси y, то точки должны вращаться вокруг одной и той же оси на ту же величину. То есть, если у вас есть матрица преобразования, которая применяется к кругу, просто примените ту же матрицу преобразования к векторам leftMost и rightMost. Взгляните на Matrix3D и его различные методы вращения.
class Circle
{
public var radius:Number;
public var position:Vector3d;
public var transform:Matrix3d;
public function Circle(_radius:Number, _position:Vector3d)
{
radius = _radius;
position = _position;
}
public function getLeftMostProjected():Vector
{
var vec:Vector3d = new Vector3d(position.x - radius, position.y, position.z);
vec = transform.transformVector(vec);
return vec.project2DNew();
}
public function getRightMostProjected():Vector
{
var vec:Vector3d = new Vector3d(position.x + radius, position.y, position.z);
vec = transform.transformVector(vec);
return vec.project2DNew();
}
}