001package conexp.fx.gui.graph.transformation; 002 003/* 004 * #%L 005 * Concept Explorer FX 006 * %% 007 * Copyright (C) 2010 - 2023 Francesco Kriegel 008 * %% 009 * This program is free software: you can redistribute it and/or modify 010 * it under the terms of the GNU General Public License as 011 * published by the Free Software Foundation, either version 3 of the 012 * License, or (at your option) any later version. 013 * 014 * This program is distributed in the hope that it will be useful, 015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 017 * GNU General Public License for more details. 018 * 019 * You should have received a copy of the GNU General Public 020 * License along with this program. If not, see 021 * <http://www.gnu.org/licenses/gpl-3.0.html>. 022 * #L% 023 */ 024 025 026import conexp.fx.core.math.GuavaIsomorphism; 027import javafx.geometry.Point3D; 028 029public final class PolarTransformation extends GuavaIsomorphism<Point3D, Point3D> { 030 031// private final double minX; 032 private final double width; 033 private final double centerX; 034 035 public PolarTransformation(final double minX, final double width) { 036// this.minX = minX; 037 this.width = width; 038 this.centerX = minX + width / 2d; 039 } 040 041 @Override 042 public final Point3D apply(final Point3D p) { 043 final double a = ((p.getX() - centerX) / width) * (1.8d * Math.PI); 044 final double r = p.getY(); 045 return new Point3D(r * Math.sin(a), r * Math.cos(a), 0); 046 } 047 048 @Override 049 public final Point3D invert(final Point3D q) { 050 final double a = Math.atan2(q.getX(), q.getY()); 051 final double r = Math.sqrt(q.getX() * q.getX() + q.getY() * q.getY()); 052 final double x = centerX + ((a * width) / (1.8d * Math.PI)); 053 final double y = r; 054 return new Point3D(x, y, 0); 055 } 056}