public double pointToObstacle(Polygon polygon, Point2D centre, Point2D front, boolean first) {
		int j = 0;
		double minDistance = -1.0;
		double dist = -1.0;
		double px, py;
		double x1, y1, x2, y2;
		double m1, q1, m2, q2;
		
		// Draws the laserbeam
		Line2D.Double beam = new Line2D.Double(centre, front);

		// Checks if beam intersects with a obstacle
		for(int i=0; i < polygon.npoints; i++) {
			j = i+1;
			if(j == polygon.npoints)
				j = 0;
			x1 = polygon.xpoints[i];
			y1 = polygon.ypoints[i];
			x2 = polygon.xpoints[j];
			y2 = polygon.ypoints[j];
			if(beam.intersectsLine(x1, y1, x2, y2)) {
				// calculates the intersection point
				if(centre.getX() == front.getX()) {
					px = centre.getX();
					py = (y2 - y1) / (x2 - x1) * (px - x1) + y1;
				}
				else
					if(x1 == x2) {
						//beam is vertical
						px = x1;
						py = (front.getY()-centre.getY()) / (front.getX()-centre.getX()) * (px - centre.getX()) + centre.getY();
					}
					else {
						// laserbeam is in an angle
						m1 = (y2 - y1) / (x2 - x1);
						q1 = y1 - m1 * x1;
						m2 = (front.getY()-centre.getY()) / (front.getX()-centre.getX());
						q2 = centre.getY() - m2 * centre.getX();
						px = (q2 - q1) / (m1 - m2);
						py = m1 * px + q1;
					}
				// calculates the distance between (cx, cy) and the intersection point
				dist = Point2D.Double.distance(centre.getX(), centre.getY(), px, py);
				
				if(minDistance == -1.0 || minDistance > dist)
					minDistance = dist;
				// returns minDistance if a collision has occured
				if(first && minDistance > 0.0)
					return minDistance;
			}
		}
		return minDistance;
	}