Java程序设计:定义MyRectangle2D类,包含: •两个名为x和y的double型数据域

Java程序设计:定义MyRectangle2D类,包含:•两个名为x和y的double型数据域,表明矩形的中心点,这两个数据域都带有get和set方法(假设... Java程序设计:定义MyRectangle2D类,包含:
•两个名为x和y的double型数据域,表明矩形的中心点,这两个数据域都带有get和set方法(假设这个矩形的边与x轴和y轴轴平行)………详情如图。第10.12题
展开
 我来答
百度网友55eb82b
2015-03-27 · TA获得超过107个赞
知道答主
回答量:87
采纳率:0%
帮助的人:50.2万
展开全部

我的参考代码(代码写得不好请见谅,还有改进之处):

MyRectangle2D.java (添加了一个获取四个关键点的方法)

package com.test.test;


import java.util.HashMap;
import java.util.Map;


public class MyRectangle2D {
    private int x;    //矩形中心点x坐标
    private int y;    //矩形中心点y坐标
    
    private double width;    //矩形的水平长度
    private double height;    //矩形的垂直长度
    

    /**
     * 无参构造函数(默认构造中心点为(0,0),水平长度和垂直长度均为1的矩形)
     */
    public MyRectangle2D(){
        this.x = 0;
        this.y = 0;
        this.width = 1;
        this.height = 1;
    }
    
    /**
     * 有参构造函数
     * @param x                 矩形的中心点x坐标
     * @param y            矩形的中心点y坐标
     * @param width        矩形的水平长度
     * @param height    矩形的垂直长度
     */
    public MyRectangle2D(int x, int y, double width, double height) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
    }


    /**
     * 获得矩形的面积
     * @return
     */
    public double getAreac(){
        return width * height;
    }

    /**
     * 获得矩形的周长
     * @return
     */
    public double getPerimeter(){
        return 2 * x + 2 * y;
    }

    /**
     * 判断指定的点是否在矩形内
     * @param x 指定的点的x坐标
     * @param y    指定的点的y坐标
     * @return    指定点在矩形内返回true,反之返回false
     */
    public boolean contains(double x,double y){
        
        if(x >= this.x - width / 2 &&  x <= this.x + width / 2){
            if(y >= this.y - height / 2 && y <= this.y + height / 2){
                return true;
            }else{
                return false;
            }
        }else{
            return false;
        }
    }
    
    /**
     * 判断指定的矩形是否在该矩形内
     * @param r    指定的矩形
     * @return    若指定的矩形在该矩形内则返回true,反之返回false
     */
    public boolean contains(MyRectangle2D r){
        Map<String, Double> myPoints = r.getPoints();
        double myXLeft =  myPoints.get("xLeft");
        double myXRight = myPoints.get("xRight");
        double myYUp = myPoints.get("yUp");
        double myYBottom = myPoints.get("yBottom");
        
        if(contains(myXLeft, myYUp)){
            if(contains(myXLeft, myYBottom)){
                if(contains(myXRight, myYUp)){
                    if(contains(myXRight,myYBottom)){
                        return true;
                    }
                }
            }
        }
        return false;
    }

    /**
     * 判断指定的矩形是否与该矩形重叠
     * @param r    指定的矩形
     * @return    若指定的矩形与该矩形重叠则返回true,反之返回false;
     */
    public boolean overlaps(MyRectangle2D r){
        if(contains(r)){
            if(width == r.width && height == r.height){
                return true;
            }
        }
        return false;
    }
    
    /**
     * 获得四个点:xLeft xRight yUp yBottom
     * @return    Map<String,Double> -> String: xLeft xRight yUp yBottom || Double:Value
     */
    public Map<String,Double> getPoints(){
        Map<String,Double> points = new HashMap<String,Double>();
        points.put("xLeft", (this.x - width / 2));
        points.put("xRight", (this.x + width / 2));
        points.put("yUp", (this.y + height / 2));
        points.put("yBottom", (this.y - height / 2));
        return points;
    }
    
    /*
     * 以下均为Get/Set方法
     */
    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 double getWidth() {
        return width;
    }
    public void setWidth(double width) {
        if(width > 0){
            this.width = width;
        }else{
            this.width = 1;
        }
    }
    public double getHeight() {
        return height;
    }
    public void setHeight(double height) {
        if(height > 0){
            this.height = height;
        }else{
            this.height = 1;
        }
        
    }
        
}


Test.java

package com.test.test;

public class Test {
    public static void main(String[] args) {
        MyRectangle2D r1 = new MyRectangle2D(2, 2, 5.5, 4.9);
        
        System.out.println("r1的中心点x坐标为:" + r1.getX());
        System.out.println("r1的中心点y坐标为:" + r1.getY());
        
        System.out.println("r1的横向长度为:" + r1.getWidth());
        System.out.println("r1的纵向长度为:" + r1.getHeight());
        
        System.out.println("r1的面积:" + r1.getAreac());
        System.out.println("r1的周长:" + r1.getPerimeter());
        
        System.out.println("(3,3)是否在r1中:" + r1.contains(3, 3));
        System.out.println("(4,5,10.5,3.2)是否在r1中:" + r1.contains(new MyRectangle2D(4, 5, 10.5, 3.2)));
        System.out.println("(3, 5, 2.3, 5.4)是否与r1重叠:" + r1.overlaps(new MyRectangle2D(3, 5, 2.3, 5.4)));
    }
}


控制台:


追问
有代码吗
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式