Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package lab03;
- import java.util.Arrays;
- import java.util.HashSet;
- import javafx.geometry.Point2D;
- public class ConvexHull {
- public static HashSet<Point2D> bruteForceConvexHull( Point2D[] listPoints ) {
- HashSet<Point2D> vertices = new HashSet<>();
- boolean foundProblem = false;
- Point2D firstPoint;
- Point2D secondPoint;
- Point2D thirdPoint;
- for (int i = 0 ; i< listPoints.length-2; ++i) {
- for (int j = i+1 ; j< listPoints.length-1; ++j ) {
- double initialSign = 0.0;
- firstPoint= listPoints[i];
- secondPoint = listPoints[j];
- double a = secondPoint.getY() - firstPoint.getY();
- double b = firstPoint.getX() - secondPoint.getX();
- double c = firstPoint.getX()*secondPoint.getY() - firstPoint.getY() * secondPoint.getX();
- foundProblem = false;
- for (int k= 0; k< listPoints.length && (!listPoints[k].equals(firstPoint) || !listPoints[k].equals(secondPoint)); ++k) {
- thirdPoint = listPoints[k];
- double check = a*thirdPoint.getX() + b*thirdPoint.getY() - c;
- if( initialSign != 0.0 ) {
- if( ( check>0 && initialSign < 0 ) || (check <0 && initialSign >0)) {
- foundProblem = true;
- break;
- }
- }else {
- initialSign = (check > 0) ? 1:-1;
- }
- }
- if (!foundProblem) {
- vertices.add(firstPoint);
- vertices.add(secondPoint);
- }
- }
- }
- return vertices;
- }
- public static void main(String[] args) {
- System.out.println("Hi");
- Point2D[] pointsTest = new Point2D[] {
- new Point2D(1.0, 1.0),
- new Point2D(1.0, 0.5),
- new Point2D(2.0, 1.0),
- new Point2D(5.0, 2.0),
- new Point2D(4.0, 2.0)
- };
- System.out.println(Arrays.toString(pointsTest));
- HashSet<Point2D> vertices = bruteForceConvexHull(pointsTest);
- for (Point2D point: vertices) {
- System.out.println(point.toString());
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement