所以我给出了不在我的矩形内的点或者在边界线上的点。矩形由方法p1,p2引入的两个点组成。所以,例如,如果您在作物之后有[(3.0,1.0),(2.0,2.0),(1.5,1.5),(3.0,0.0)],你应该[(3.0,1.0),(3.0,0.0) )]所以基本上该方法应该删除给定点外的所有点。
我这样解决了。但是当涉及到负数时,我会得到一些奇怪的错误。
public void crop(Point p1, Point p2) {
double highX = 0;
double lowX = 0;
double highY = 0;
double lowY = 0;
if (p1.getX() > p2.getX()) {
highX = p1.getX();
lowX = p2.getX();
} else {
highX = p2.getX();
lowX = p1.getX();
}
if (p1.getY() > p2.getY()) {
highY = p1.getY();
lowY = p2.getY();
} else {
highY = p2.getY();
lowY = p1.getY();
}
for (int i = 0; i < points.size(); i++) {
Point P = points.get(i);
if (Math.abs(P.getX() - lowX) < Point.EPSILON
|| Math.abs(P.getX() - highX) < Point.EPSILON
|| Math.abs(P.getY() - lowY) < Point.EPSILON
|| Math.abs(P.getY() - highY) < Point.EPSILON) {
System.out.println(Math.abs(P.getX() - highX) < Point.EPSILON);
System.out.println("Keeping: " + points.get(i));
// keep
} else {
System.out.println("Remvoing: " + points.get(i));
points.remove(i);
}
if (P.getX() < lowX || P.getX() > highX || P.getY() < lowY
|| P.getY() > highY) {
System.out.println("Removing: " + points.get(i));
points.remove(i);
}
}
}
解决这个问题的任何帮助都会很好我已经被困了一段时间
答案 0 :(得分:1)
java.awt.Rectangle
为整数和java.awt.Rectangle2D
类,方法为contains(x, y)
。
这将解决点在矩形内部或左边界或上边界上的情况。
出于好的理由,你不应该将右边界和下边界上的点视为内部。 与那个需要的人交谈。
否则你可能得到两个触摸矩形内的点,这不是一个好的解决方案。
另外通常指定:&#34;如果某个点正好在边框处,则该方法可能返回true或false&#34;。
然而,对于斧头平行的矩形,&#34;要在内部或在边界上&#34;任务很容易解决。查看java方法的src并更改&lt;到&lt; =。 (或类似的)
答案 1 :(得分:0)
我最终想出了解决问题的方法
public void crop(Point p1, Point p2) {
double highX = 0;
double lowX = 0;
double highY = 0;
double lowY = 0;
ArrayList<Point> list = new ArrayList<Point>();
if (p1.getX() > p2.getX()) {
highX = p1.getX();
lowX = p2.getX();
} else {
highX = p2.getX();
lowX = p1.getX();
}
if (p1.getY() > p2.getY()) {
highY = p1.getY();
lowY = p2.getY();
} else {
highY = p2.getY();
lowY = p1.getY();
}
if (p1.equals(p2)) {
list.add(p1);
points = list;
return;
}
double i = 0;
while (i < points.size()) {
Point P = points.get((int) i);
if (P.getX() < highX + EPSILON && P.getX() > lowX - EPSILON
&& P.getY() < highY + EPSILON && P.getY() > lowY - EPSILON) {
list.add(P);
}
i++;
}//thank god
points = list;
}