/*
* Copyright 2013 MicaByte Systems
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.micabytes.math;
/**
* Minimal Polygon class for Android. <p/> Basic polygon wrapper to handle simple point in polygon
* problems.
*/
@SuppressWarnings({"unused", "ClassIndependentOfModule", "ClassUnconnectedToPackage"})
public class Polygon {
// Polygon coordinates.
private final int[] polyX;
private final int[] polyY;
// Number of sides in the polygon.
private final int polyN;
public Polygon(int[] px, int[] py, int ps) {
polyX = new int[px.length];
System.arraycopy(px, 0, polyX, 0, px.length);
polyY = new int[py.length];
System.arraycopy(py, 0, polyY, 0, py.length);
polyN = ps;
}
/**
* Checks if the Polygon contains the point x, y
*/
@SuppressWarnings({"ValueOfIncrementOrDecrementUsed", "OverlyComplexArithmeticExpression", "OverlyComplexBooleanExpression"})
public boolean contains(int x, int y) {
boolean oddTransitions = false;
for (int i = 0, j = polyN - 1; i < polyN; j = i++) {
if (((polyY[i] < y) && (polyY[j] >= y)) || ((polyY[j] < y) && (polyY[i] >= y))) {
if ((polyX[i] + (((y - polyY[i]) / (polyY[j] - polyY[i])) * (polyX[j] - polyX[i]))) < x) {
oddTransitions = !oddTransitions;
}
}
}
return oddTransitions;
}
}