private boolean isConnectableInternal(Neighborhood n1, Neighborhood n2) {
		if (n1.getCenter().equals(n2.getCenter())) {
			return false;
		}
		final LineSegmentInt seg1 = new LineSegmentInt(n1.getCenter(), n2.getCenter());
		if (hasIntersectionStrict(seg1)) {
			return false;
		}
		final double angle1 = Singularity.convertAngle(seg1.getAngle());
		final double angle2 = Singularity.convertAngle(seg1.getOppositeAngle());
		assert angle2 == Singularity.convertAngle(new LineSegmentInt(n2.getCenter(), n1.getCenter()).getAngle());
		if (n1.isInAngleStrict(angle1) && n2.isInAngleStrict(angle2)) {
			return true;
		}
		if (n1.isAngleLimit(angle1) && n2.isAngleLimit(angle2)) {
			if (n1.is360() || n2.is360()) {
				return true;
			}
			final Orientation o1 = n1.getOrientationFrom(angle1);
			final Orientation o2 = n2.getOrientationFrom(angle2);
			return o1 != o2;
		}
		return false;
	}