private void changeMagnification(Lens lens, float delta) { float magnification = lens.getMagnification() + delta; magnification = Math.max(floor, magnification); magnification = Math.min(magnification, ceiling); lens.setMagnification(magnification); }
double mag = Math.tan(Math.PI / 2 * lens.getMagnification()); radius *= mag;
double mag = lens.getMagnification(); radius *= mag;
double radius = polar.radius; double mag = lens.getMagnification(); radius *= mag;
double mag = lens.getMagnification(); radius *= mag;
radius /= Math.PI / 2; radius *= viewRadius; double mag = Math.tan(Math.PI / 2 * lens.getMagnification()); radius /= mag; polar = polar.newRadius(radius);
/** override base class to un-project the fisheye effect */ private Point2D _inverseTransform(Point2D viewPoint) { viewPoint = delegate.inverseTransform(viewPoint); Point2D viewCenter = lens.getCenter(); double viewRadius = lens.getRadius(); double ratio = lens.getRatio(); double dx = viewPoint.getX() - viewCenter.getX(); double dy = viewPoint.getY() - viewCenter.getY(); // factor out ellipse dx *= ratio; Point pointFromCenter = Point.of(dx, dy); PolarPoint polar = PolarPoint.cartesianToPolar(pointFromCenter); double radius = polar.radius; if (radius > viewRadius) { return viewPoint; } double mag = lens.getMagnification(); radius /= mag; polar = polar.newRadius(radius); Point projectedPoint = PolarPoint.polarToCartesian(polar); projectedPoint = Point.of(projectedPoint.x / ratio, projectedPoint.y); Point2D translatedBack = new Point2D.Double( projectedPoint.x + viewCenter.getX(), projectedPoint.y + viewCenter.getY()); return translatedBack; }
double mag = Math.tan(Math.PI / 2 * lens.getMagnification()); radius *= mag;
/** override base class to un-project the fisheye effect */ public Point2D inverseTransform(Point2D viewPoint) { Point2D viewCenter = lens.getCenter(); double viewRadius = lens.getRadius(); double ratio = lens.getRatio(); double dx = viewPoint.getX() - viewCenter.getX(); double dy = viewPoint.getY() - viewCenter.getY(); // factor out ellipse dx *= ratio; Point pointFromCenter = Point.of(dx, dy); PolarPoint polar = PolarPoint.cartesianToPolar(pointFromCenter); double radius = polar.radius; if (radius > viewRadius) { return delegate.inverseTransform(viewPoint); } double mag = lens.getMagnification(); radius /= mag; polar = polar.newRadius(radius); Point projectedPoint = PolarPoint.polarToCartesian(polar); projectedPoint = Point.of(projectedPoint.x / ratio, projectedPoint.y); Point2D translatedBack = new Point2D.Double( projectedPoint.x + viewCenter.getX(), projectedPoint.y + viewCenter.getY()); return delegate.inverseTransform(translatedBack); }
radius /= Math.PI / 2; radius *= viewRadius; double mag = Math.tan(Math.PI / 2 * lens.getMagnification()); radius /= mag; polar = polar.newRadius(radius);