如何解决我需要使用中心,高X轴和宽Y轴坐标创建矩形的类
在此测试中使用矩形形成
@Test
public void testRectangle1() {
Point center = new Point(20,30);
Rectangle rect = new Rectangle(center,20,20);
assertAll(
() -> assertEquals(10,rect.getTopLeft().getX()),() -> assertEquals(20,rect.getTopLeft().getY()),() -> assertEquals(30,rect.getBottomRight().getX()),() -> assertEquals(40,rect.getBottomRight().getY()),rect.getWidth()),rect.getHeight())
);
}
我已经有了关于该类的知识,它应该可以正常工作,我主要是为了理解而添加它。
public class Point {
private int x,y;
public Point(int x,int y) {
this.x = x;
this.y = y;
}
public Point() {
this(0,0);
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public void moveTo(int newX,int newY) {
x = newX;
y = newY;
}
public void moveRel(int dx,int dy) {
x += dx;
y += dy;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Point other = (Point) obj;
if (x != other.x)
return false;
if (y != other.y)
return false;
return true;
}
}
所以我对矩形本身陷入二等舱。首先,我有点难以构造将自己形成矩形的构造器。还有矩形类的填充方法,因为我对Java和编码的经验很少,所以我很难理解它们应该返回什么。
public class Rectangle {
public int width = 0;
public int height = 0;
public Point center;
public Rectangle(Point center,int width,int height) {
int x = 0;
int y = 0;
width=x;
height=y;
}
public Point getTopLeft() {
Point point = new Point();
return point;
}
public Point getBottomRight() {
Point point = new Point();
return point;
}
public int getWidth() {
int x = 0;
return x;
}
public int getHeight() {
int y = 0;
return y;
}
}
解决方法
在getTopLeft()
和getBottomRight()
中,您可以创建一个具有中心坐标的点,然后moveRel(int,int)
将其除以宽度和高度除以2,因为您的中心点位于两者的中间
public Point getTopLeft() {
Point point = new Point(center.getX(),center.getY());
point.moveRel(- width / 2,height / 2);
return point;
}
public Point getBottomRight() {
Point point = new Point(center.getX(),center.getY());
point.moveRel(width / 2,- height / 2);
return point;
}
构造函数应将给定值写入类的字段。 还可以考虑将十进制类型用作坐标,只有高度和宽度可以被2整除。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。