Ellipse2D 允许我绘制一个椭圆,假设我知道左上角的坐标以及 a 和 b 轴。相反,我有两个焦点的坐标,以及每个点到两个焦点的 l 距离。如何从两个焦点的坐标开始创建相应的 Ellipse2D?
问问题
1014 次
1 回答
2
这是我的代码。它创建一个以原点 (0,0) 为中心的大小合适的椭圆。然后它使用 AffineTransform 将椭圆平移和旋转到适当的位置。返回定义所需椭圆的 Shape 。变量名来自 http://math.tutorvista.com/geometry/ellipse-equation.html 希望它对你有用。
#import java.awt.geom.*;
/* Create an ellipse given foci and distance.
(x1,y1) and (x2,y2) are foci. semimajor axis (the sum of distances
that define the ellipse) is *dist*.
See
for meaning of vars
*/
public Shape makeEllipse (
float x1, float y1, float x2, float y2, float dist
)
{
// Create foci points
Point2D f1 = new Point2D.Float (x1, y1);
Point2D f2 = new Point2D.Float (x2, y2);
// Calculate ellipse characteristics
double a = dist / 2.0;
double c = f1.distance (f2) / 2.0;
// If 'dist' is smaller than the distance between foci,
// the ellipse is invalid
if (a < c)
die ("Invalid semimajor axis length");
double b = Math.sqrt (a * a - c * c);
Point2D centre =
new Point2D.Float ((x1 + x2) / 2.0, (y1 + y2) / 2.0);
// Create a transform to rotate and translate the ellipse
double theta = Math.atan2 (y2 - y1, x2 - x1);
AffineTransform trans = new AffineTransform();
trans.translate (centre.getX(), centre.getY());
trans.rotate(theta);
// Create an ellipse with correct size but origin at centre
Ellipse2D tmpEllipse = new Ellipse2D.Double (-a, -b, 2 * a, 2 * b);
// Translate and rotate it to where it should be
Shape ellipse = trans.createTransformedShape (tmpEllipse);
return ellipse;
}
于 2015-02-10T00:20:40.930 回答