我需要使用中心,高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整除。