Добавлен метод clip
This commit is contained in:
parent
eca1b4cbdd
commit
50226ed4eb
@ -24,6 +24,50 @@ public class Clip extends Rect {
|
||||
return y + height;
|
||||
}
|
||||
|
||||
public double[] clip(double x1, double y1, double x2, double y2) {
|
||||
int c1 = getClipCode(x1, y1);
|
||||
int c2 = getClipCode(x2, y2);
|
||||
while (c1 != 0 || (c2 != 0)) {
|
||||
if (c1 == 0 && c2 == 0) {
|
||||
return new double[] { x1, y1, x2, y2 };
|
||||
}
|
||||
double dx = x2 - x1;
|
||||
double dy = y2 - y1;
|
||||
if (c1 != 0) {
|
||||
if (x1 < x) {
|
||||
y1 += dy * (x - x1) / dx;
|
||||
x1 = x;
|
||||
} else if (x1 > getXMax()) {
|
||||
y1 += dy * (getXMax() - x1) / dx;
|
||||
x1 = getXMax();
|
||||
} else if (y1 < y) {
|
||||
x1 += dx * (y - y1) / dy;
|
||||
y1 = y;
|
||||
} else if (y1 > getYMax()) {
|
||||
x1 += dx * (getYMax() - y1) / dy;
|
||||
y1 = getYMax();
|
||||
}
|
||||
c1 = getClipCode(x1, y1);
|
||||
} else if (c2 != 0) {
|
||||
if (x2 < x) {
|
||||
y2 += dy * (x - x2) / dx;
|
||||
x2 = x;
|
||||
} else if (x2 > getXMax()) {
|
||||
y2 += dy * (getXMax() - x2) / dx;
|
||||
x2 = getXMax();
|
||||
} else if (y2 < y) {
|
||||
x2 += dx * (y - y2) / dy;
|
||||
y2 = y;
|
||||
} else if (y2 > getYMax()) {
|
||||
x2 += dx * (getYMax() - y2) / dy;
|
||||
y2 = getYMax();
|
||||
}
|
||||
c2 = getClipCode(x2, y2);
|
||||
}
|
||||
}
|
||||
return new double[] { x1, y1, x2, y2 };
|
||||
}
|
||||
|
||||
public int getClipCode(double x, double y) {
|
||||
int xmin = (x < super.x) ? 1 : 0;
|
||||
int xmax = (x > getXMax()) ? 1 : 0;
|
||||
|
Loading…
Reference in New Issue
Block a user