double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
Уравнение для эллипса, центрируемого в источнике,
(x/A)^2 + (y/B)^2 = 1
Теперь, если Вы хотите включить прямоугольник MxN с затмением, можно переместить его центр в начало координат. Верхние правые координаты (M/2,N/2)
, заменяя в уравнении эллипса, у Вас есть формула, которую можно использовать для решения B, данного (или данного B).
, Если у Вас есть прямоугольник 4x2, верхние правые координаты (2,1), заменение Вас имеет эти (2/A)^2 + (1/B)^2 = 1
, затем если A=4
решение для B дает B=1/sqrt(1-(1/2)^2)
.
Если Вы даете Вашему эллипсу то же соотношение сторон как прямоугольник, можно работать на основании, которое, что Вы хотите, круг, включающий квадрат, затем расширенный, как будто Вы преобразовали квадрат в необходимый прямоугольник.
Для квадрата с половиной длины стороны = 1, радиус круга был бы sqrt (2).
Так, развертываясь тета от 0 - 360', координатные точки эллипса будут:
, где rect.width и rect.height половина ширины соответствующих сторон.
Принятие Вас означает ограниченный (который более точен, чем "вложенный"), можно считать приблизительно , как ограничить прямоугольник здесь . Оттуда, можно расширить его к прямоугольному, как заявляет Alnitak.
Экспериментально я обнаружил, что эллипс, определяемый прямоугольником, который sqrt (2) больше внутреннего прямоугольника, работает. Итак, передайте sqrt (2) этой функции, и вы получите соответствующий прямоугольник:
RectangleF boundingEllipse = GetScaledRectangle (innerRect, Convert.ToSingle (Math.Sqrt (2d)));
private RectangleF GetScaledRectangle (RectangleF rectangle , плавающая шкала) { float width = rect.Width * масштаб; float height = rect.Height * scale;
float gap = width - rect.Width;
float left = rect.Left - (gap / 2f);
gap = height - rect.Height;
float top = rect.Top - (gap / 2f);
return new RectangleF(left, top, width, height);
}