Add code for rotating a vertex around certain point (#15683)
Co-authored-by: rajatgarg <rajatgarg@adobe.com>
This commit is contained in:
		
							parent
							
								
									b38e72cd5a
								
							
						
					
					
						commit
						82d2112665
					
				| @ -0,0 +1,26 @@ | |||||||
|  | package com.baeldung.math.rotatevertex; | ||||||
|  | 
 | ||||||
|  | import java.awt.geom.AffineTransform; | ||||||
|  | import java.awt.geom.Point2D; | ||||||
|  | 
 | ||||||
|  | public class VertexRotation { | ||||||
|  |     public static Point2D.Double usingOriginAsRotationPoint(Point2D.Double vertex, Point2D.Double rotationPoint, double angle) { | ||||||
|  |         double translatedToOriginX = vertex.x - rotationPoint.x; | ||||||
|  |         double translatedToOriginY = vertex.y - rotationPoint.y; | ||||||
|  | 
 | ||||||
|  |         double rotatedX = translatedToOriginX * Math.cos(angle) - translatedToOriginY * Math.sin(angle); | ||||||
|  |         double rotatedY = translatedToOriginX * Math.sin(angle) + translatedToOriginY * Math.cos(angle); | ||||||
|  | 
 | ||||||
|  |         double reverseTranslatedX = rotatedX + rotationPoint.x; | ||||||
|  |         double reverseTranslatedY = rotatedY + rotationPoint.y; | ||||||
|  | 
 | ||||||
|  |         return new Point2D.Double(reverseTranslatedX, reverseTranslatedY); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static Point2D.Double usingAffineTransform(Point2D.Double vertex, Point2D.Double rotationPoint, double angle) { | ||||||
|  |         AffineTransform affineTransform = AffineTransform.getRotateInstance(angle, rotationPoint.x, rotationPoint.y); | ||||||
|  |         Point2D.Double rotatedVertex = new Point2D.Double(); | ||||||
|  |         affineTransform.transform(vertex, rotatedVertex); | ||||||
|  |         return rotatedVertex; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,31 @@ | |||||||
|  | package com.baeldung.math.rotatevertex; | ||||||
|  | 
 | ||||||
|  | import static org.junit.jupiter.api.Assertions.assertEquals; | ||||||
|  | 
 | ||||||
|  | import java.awt.geom.Point2D; | ||||||
|  | 
 | ||||||
|  | import org.junit.jupiter.api.Test; | ||||||
|  | 
 | ||||||
|  | public class VertexRotationUnitTest { | ||||||
|  |     @Test | ||||||
|  |     void givenRotationPoint_whenUseOrigin_thenRotateVertex() { | ||||||
|  |         Point2D.Double vertex = new Point2D.Double(2.0, 2.0); | ||||||
|  |         Point2D.Double rotationPoint = new Point2D.Double(0.0, 1.0); | ||||||
|  |         double angle = Math.toRadians(45.0); | ||||||
|  |         Point2D.Double rotatedVertex = VertexRotation.usingOriginAsRotationPoint(vertex, rotationPoint, angle); | ||||||
|  | 
 | ||||||
|  |         assertEquals(0.707, rotatedVertex.getX(), 0.001); | ||||||
|  |         assertEquals(3.121, rotatedVertex.getY(), 0.001); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     void givenRotationPoint_whenUseAffineTransform_thenRotateVertex() { | ||||||
|  |         Point2D.Double vertex = new Point2D.Double(2.0, 2.0); | ||||||
|  |         Point2D.Double rotationPoint = new Point2D.Double(0.0, 1.0); | ||||||
|  |         double angle = Math.toRadians(45.0); | ||||||
|  |         Point2D.Double rotatedVertex = VertexRotation.usingAffineTransform(vertex, rotationPoint, angle); | ||||||
|  | 
 | ||||||
|  |         assertEquals(0.707, rotatedVertex.getX(), 0.001); | ||||||
|  |         assertEquals(3.121, rotatedVertex.getY(), 0.001); | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user