有一个任务是用这样的接口实现一些三角形类
public interface Triangle {
void moveApex(Point from, Point to);
List<Point> getApexes();
void rotate(double angle);
void setLocation(Point p);
Point getLocation();
void setSize(Dimension d);
Dimension getSize();
}
其中Point和Dimension是一些整数对。你会用什么方式实现它?你会用Apexes创建一些字段,或者你将使用2个角度和一个基线或smt操作吗? 感谢。
答案 0 :(得分:2)
点数可以 - 如您所述 - 表示为一对点。我们将这样一对称为二维向量。矢量可以被解释为从原点(坐标系)到点的箭头,或者只是从任何指示方向或运动的箭头开始。即向量是单个点和运动的表示。
因此,您可以使用向量定义三角形。矢量可以通过称为矩阵的2x2维数字数组进行转换。在这些矩阵的帮助下,可以很好地表达任意变换。
以下是一些可以帮助您并提供更详细信息的链接。
向量:http://en.wikipedia.org/wiki/Euclidean_vector
三角概述:http://en.wikipedia.org/wiki/Triangle
矩阵概述:http://en.wikipedia.org/wiki/Matrix_multiplication
通过矩阵旋转:http://en.wikipedia.org/wiki/Rotation_matrix
setLocation
需要向量移动(即向量加法)setSize
可能需要向量乘法rotate
实施矩阵轮换所以请阅读上面的链接,然后将数学转换为Java。数学本身并不复杂,所以应该可以毫不费力地这样做。
当然,据说有很多实现。
答案 1 :(得分:2)
您的interface
无效。实际上,您有两个名为getLocation()
的方法可以返回不同的对象。也许你必须选择不同的名字,例如:
Point getLocationAsPoint();
Dimension getLocationAsDimension();
现在,如果您使用Eclipse,您只需创建一个新类,指示此类实现Triangle
接口,它将创建以下框架:
public class MyTriangle implements Triangle {
@Override
public List<Point> getApexes() {
// TODO Auto-generated method stub
return null;
}
@Override
public void moveApex(Point from, Point to) {
// TODO Auto-generated method stub
}
@Override
public void rotate(double angle) {
// TODO Auto-generated method stub
}
@Override
public void setLocation(Point p) {
// TODO Auto-generated method stub
}
@Override
public void setSize(Dimension d) {
// TODO Auto-generated method stub
}
@Override
public Dimension getLocationAsDimension() {
// TODO Auto-generated method stub
return null;
}
@Override
public Point getLocationAsPoint() {
// TODO Auto-generated method stub
return null;
}
}
然后,只需编写每个方法的代码。我强烈建议您选择TDD以正确完成任务。
Eclipse可以创建一个新的JUnit测试类,它将作为您的起点:创建一个新的JUnit测试用例,并在类创建向导中的测试中的选项中选择MyTriangle