View Javadoc

1   /*
2    * Copyright (c) 2003-2008 by Cosylab d. d.
3    *
4    * This file is part of CosyBeans-Common.
5    *
6    * CosyBeans-Common is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU General Public License as published by
8    * the Free Software Foundation, either version 3 of the License, or
9    * (at your option) any later version.
10   *
11   * CosyBeans-Common is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU General Public License for more details.
15   *
16   * You should have received a copy of the GNU General Public License
17   * along with CosyBeans-Common.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  
20  package com.cosylab.gui.components.gauger;
21  
22  import java.awt.Point;
23  import java.awt.geom.Point2D;
24  
25  
26  /**
27   * Class representing polar point defined by radius and angle.
28   *
29   * @author <a href="mailto:ales.pucelj@cosylab.com">Ales Pucelj</a>
30   * @version $id$
31   */
32  public class PolarPoint
33  {
34  	private static final double DEG_TO_RAD = Math.PI / 180.0;
35  	private static final double RAD_TO_DEG = 180.0 / Math.PI;
36  
37  	private double r;
38  
39  	private double phi;
40  
41  	/**
42  	 * Creates a new PolarPoint object.
43  	 */
44  	public PolarPoint()
45  	{
46  	}
47  
48  	/**
49  	 * Creates a new PolarPoint object.
50  	 *
51  	 * @param r Radius parameter.
52  	 * @param phi Angle parameter in radians.
53  	 */
54  	public PolarPoint(double r, double phi)
55  	{
56  		this.r = r;
57  		this.phi = phi;
58  	}
59  
60  	/**
61  	 * Converts degrees to radians.
62  	 *
63  	 * @param angle angle in degrees.
64  	 *
65  	 * @return Angle in radians.
66  	 */
67  	public static final double degToRad(double angle)
68  	{
69  		return angle * DEG_TO_RAD;
70  	}
71  
72  	/**
73  	 * Converts radians to degrees.
74  	 *
75  	 * @param angle in radians.
76  	 *
77  	 * @return angle in degrees.
78  	 */
79  	public static final double radToDeg(double angle)
80  	{
81  		return angle * RAD_TO_DEG;
82  	}
83  
84  	/**
85  	 * Converts polar point to cartesian coordinates.
86  	 *
87  	 * @param r Radius parameter.
88  	 * @param phi Angle parameter.
89  	 *
90  	 * @return Point in cartesian space.
91  	 */
92  	public static final Point2D polarToCartesian(double r, double phi)
93  	{
94  		double phiInRadians = degToRad(phi);
95  		double x = (r * Math.cos(phiInRadians));
96  		double y = -(r * Math.sin(phiInRadians));
97  
98  		return new Point2D.Double(x, y);
99  	}
100 
101 	/**
102 	 * Converts polar point to cartesian coordinates. Result will be placed in
103 	 * point specified. This method will not create new instance of point to
104 	 * hold the result, but the provided instance will be returned.
105 	 *
106 	 * @param p Point which will hold the result.
107 	 * @param r Radius parameter.
108 	 * @param phi Angle parameter.
109 	 *
110 	 * @return p parameter.
111 	 */
112 	public static final Point2D polarToCartesian(Point2D p, double r, double phi)
113 	{
114 		double rPhi = degToRad(phi);
115 		p.setLocation((r * Math.cos(rPhi)), -(r * Math.sin(rPhi)));
116 
117 		return p;
118 	}
119 
120 	/**
121 	 * Converts polar point to cartesian coordinates.
122 	 *
123 	 * @param pp Point in polar coordinates.
124 	 * @param p Point in cartesian coordinates.
125 	 */
126 	public static final void polarToCartesian(PolarPoint pp, Point2D p)
127 	{
128 		double rPhi = degToRad(pp.phi);
129 
130 		p.setLocation(pp.r * Math.cos(rPhi), pp.r * Math.sin(rPhi));
131 	}
132 
133 	/**
134 	 * Converts this point to cartesian coordinate representation.
135 	 *
136 	 * @return Point in cartesian coordinates.
137 	 */
138 	public Point2D toPoint()
139 	{
140 		return polarToCartesian(r, phi);
141 	}
142 
143 	/**
144 	 * Converts this point to cartesian coordinates and puts result in provided
145 	 * instance of point.
146 	 *
147 	 * @param p Object that will hold the result.
148 	 *
149 	 * @return Resulting point, which is the same object as one passed as 
150 	 * 		   parameter.
151 	 */
152 	public Point2D toPoint(Point p)
153 	{
154 		return polarToCartesian(p, r, phi);
155 	}
156 }
157 
158 /* __oOo__ */