检查一个点是否在指定的矩形内

好的,所以我正在为Java类做一个赋值,赋值的一部分是找出一个点是否在矩形的尺寸之内。所以我创建了这段代码:
public boolean contains(Point p) {
    return (this.getLocation().getX() < p.getX() && this.getLocation().getY() < p.getY() &&
            this.getLocation().getX() + this.getWidth() > p.getX()  &&
            this.getLocation().getY() + this.getHeight() > p.getY());
}
我也创建了一个
Point
类,这就是为什么我要求一个
Point p
参数的原因。为了测试此
boolean
,我在主类中创建了一个简单的
if
语句:
//check if one rectangle\'s point is inside another
if (rectangle.contains(rectangle2.getLocation()))
    System.out.println(\"the point is in the rectangle\");
点的位置是(6,7)。矩形1的点,宽度和高度分别为(4,5),9和3。我知道这一点在第一个矩形内,但未显示
println
语句,这意味着我创建的
boolean
一定有问题,但我没有看到错误,也许我的头有些混浊但可以有人向我指出这是怎么了? 附言这是控制台的全部工作,我不处理某些GUI或图形编程。     
已邀请:
        在我看来还可以。我将检查您的测试用例是否确实包含您认为的数字;我还将检查您的访问器是否都返回了正确的值(我无法告诉您我将getX()实现为{return this.y;}的次数)。除此之外,这是任何人的猜测。     
        AWT矩形已经具有
contains
方法。 (链接) 如果您了解命名空间之间的冲突,那么任务似乎就开始了。例如,如果您很懒惰(这是程序员最受推崇的素质之一),则可以编写:
public static class Rectangle {
    java.awt.Rectangle _r;

    public Rectangle(int x, int y) {
        this._r = new java.awt.Rectangle(x, y);
    }
    public boolean contains(Point p) {
        return this._r.contains(p);
    }
}
您通常不希望重新实现功能或扩展类。     
        通常在处理计算机图形时,左上角为(0,0),右下角为(宽度,高度)。 这意味着您应该逆转条件     
        尽管这是一种幼稚的方法,但我尝试了以下概念: 如果
Point
(px,py)在给定的矩形内,则通过将2个矩形点和给定的点连接起来形成的三角形的面积之和(例如,沿逆时针或顺时针方向)将等于该矩形的总和。 我有一张相同的照片,但是由于声誉低下(因为我是新手),因此无法发布。 当我将其表达为实际的Java代码时,我不得不处理一种情况 小数部分为15 9s的面积值四舍五入到最接近的整数。 请参考以下代码:
import static java.lang.Math.sqrt;

public class PointInsideRect
{
    private static double square(double n)
    {
        return n*n;
    }
    private static double areaOfTriangle(
                int xa, int ya,
                int xb, int yb,
                int px, int py )
    {
        double side1 = sqrt(square(ya-yb) + square(xa-xb));
        double side2 = sqrt(square(ya-py) + square(xa-px));
        double side3 = sqrt(square(yb-py) + square(xb-px));

        double semi_perimeter = (side1 + side2 + side3) / 2;

        return sqrt(semi_perimeter
                    * ( semi_perimeter - side1 )
                    * ( semi_perimeter - side2 )
                    * ( semi_perimeter - side3 ));
    }

    private static double areaOfRect(
                int x1, int y1,
                int x2, int y2,
                int x3, int y3,
                int x4, int y4 )
    {
        double side1 = sqrt(square(y1-y2) + square(x1-x2));
        double side2 = sqrt(square(y2-y3) + square(x2-x3));
        return side1 * side2;
    }

    public boolean check(
                int x1, int y1,
                int x2, int y2,
                int x3, int y3,
                int x4, int y4, 
                int pointX, int pointY)
    {
        double tri1Area = areaOfTriangle(x1,y1, x2,y2, pointX,pointY);
        double tri2Area = areaOfTriangle(x2,y2, x3,y3, pointX,pointY);
        double tri3Area = areaOfTriangle(x3,y3, x4,y4, pointX,pointY);
        double tri4Area = areaOfTriangle(x4,y4, x1,y1, pointX,pointY);

        double rectArea = areaOfRect(x1,y1, x2,y2, x3,y3, x4,y4);

        double triAreaSum = tri1Area + tri2Area + tri3Area+ tri4Area;


        if(triAreaSum % Math.pow(10, 14) >= 0.999999999999999)
        {
            triAreaSum = Math.ceil(triAreaSum);
            System.out.println(triangleAreaSum);
        }
        return triAreaSum == rectArea;
    }


    public static void main(String[] args)
    {
        PointInsideRect inRect = new PointInsideRect();

        System.out.println(inRect.check(1,1, 1,3, 3,3, 3,1, 2,2));
    }
}
    

要回复问题请先登录注册