问题描述
好的,所以我正在为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 y4,int pointX,int pointY)
{
double tri1Area = areaOfTriangle(x1,y1,x2,y2,pointX,pointY);
double tri2Area = areaOfTriangle(x2,x3,y3,pointY);
double tri3Area = areaOfTriangle(x3,x4,y4,pointY);
double tri4Area = areaOfTriangle(x4,x1,pointY);
double rectArea = areaOfRect(x1,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,3,2,2));
}
}