1 package de.lathanda.eos.game.geom;
3 import de.lathanda.eos.base.Picture;
4 import de.lathanda.eos.base.math.Matrix;
5 import de.lathanda.eos.base.math.Point;
6 import de.lathanda.eos.base.math.Vector;
41 double[] coordinates_x;
46 double[] coordinates_y;
51 double[] coordinates_final_x;
56 double[] coordinates_final_y;
91 setVertices(poly.coordinates_x, poly.coordinates_y);
103 coordinates_x =
new double[n];
104 coordinates_y =
new double[n];
105 Vector previous =
new Vector(x[0] - x[n - 1], y[0] - y[n - 1]);
107 for (
int i = 0; i < n; i++) {
108 coordinates_x[i] = x[i];
109 coordinates_y[i] = y[i];
112 for (
int i = 0; i < n; i++) {
114 actual =
new Vector(coordinates_x[j] - coordinates_x[i],
115 coordinates_y[j] - coordinates_y[i]);
118 new Point(coordinates_x[(i - 1 + n) % n], coordinates_y[(i - 1 + n) % n]),
119 new Point(coordinates_x[i], coordinates_y[i]),
120 new Point(coordinates_x[j], coordinates_y[j]));
124 coordinates_final_x =
new double[n];
125 coordinates_final_y =
new double[n];
130 return Types.POLYGON;
138 private void transform() {
139 if (coordinates_x ==
null) {
144 m.transform(coordinates_x, coordinates_y, coordinates_final_x,
145 coordinates_final_y);
146 right = Double.NEGATIVE_INFINITY;
147 left = Double.POSITIVE_INFINITY;
148 top = Double.NEGATIVE_INFINITY;
149 bottom = Double.POSITIVE_INFINITY;
150 for (
int i = 0; i < n; i++) {
151 if (coordinates_final_x[i] <
left) {
152 left = coordinates_final_x[i];
154 if (coordinates_final_x[i] >
right) {
155 right = coordinates_final_x[i];
157 if (coordinates_final_y[i] <
bottom) {
158 bottom = coordinates_final_y[i];
160 if (coordinates_final_y[i] >
top) {
161 top = coordinates_final_y[i];
177 for (
int i = 0, j; i < n; i++) {
179 v =
new Vector(coordinates_final_x[j] - coordinates_final_x[i],
180 coordinates_final_y[j] - coordinates_final_y[i]);
181 w =
new Vector(x - coordinates_final_x[i], y
182 - coordinates_final_y[i]);
203 double distance = Double.POSITIVE_INFINITY;
204 double edgeDistance = 0;
205 double projection = 0;
206 boolean within =
true;
207 for (
int i = 0, j; i < n; i++) {
209 v =
new Vector(coordinates_final_x[j] - coordinates_final_x[i],
210 coordinates_final_y[j] - coordinates_final_y[i]);
211 w =
new Vector(x - coordinates_final_x[i],
212 y - coordinates_final_y[i]);
216 if (edgeDistance > 0) {
219 edgeDistance = -edgeDistance;
222 if (0 < projection && projection < v.
getLength()) {
245 picture.
drawPolygon(coordinates_final_x, coordinates_final_y);
abstract void drawPolygon(double[] x, double[] y)
double crossproduct(Vector b)
double getPerpendicularLength(Vector base)
double getProjectionLength(Vector base)
final void setVertices(double[] x, double[] y)
Polygon(double[] x, double[] y)
double getDistance(double x, double y)
boolean contains(double x, double y)
void draw(Picture picture)
double bottom
Untere Grenze.
double right
Rechte Grenze.