mirror of
				https://github.com/excalidraw/excalidraw.git
				synced 2025-10-31 10:54:33 +01:00 
			
		
		
		
	chore: Unify math types, utils and functions (#8389)
Co-authored-by: dwelle <5153846+dwelle@users.noreply.github.com>
This commit is contained in:
		
							
								
								
									
										47
									
								
								packages/math/angle.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								packages/math/angle.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | ||||
| import type { | ||||
|   Degrees, | ||||
|   GlobalPoint, | ||||
|   LocalPoint, | ||||
|   PolarCoords, | ||||
|   Radians, | ||||
| } from "./types"; | ||||
| import { PRECISION } from "./utils"; | ||||
|  | ||||
| // TODO: Simplify with modulo and fix for angles beyond 4*Math.PI and - 4*Math.PI | ||||
| export const normalizeRadians = (angle: Radians): Radians => { | ||||
|   if (angle < 0) { | ||||
|     return (angle + 2 * Math.PI) as Radians; | ||||
|   } | ||||
|   if (angle >= 2 * Math.PI) { | ||||
|     return (angle - 2 * Math.PI) as Radians; | ||||
|   } | ||||
|   return angle; | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Return the polar coordinates for the given cartesian point represented by | ||||
|  * (x, y) for the center point 0,0 where the first number returned is the radius, | ||||
|  * the second is the angle in radians. | ||||
|  */ | ||||
| export const cartesian2Polar = <P extends GlobalPoint | LocalPoint>([ | ||||
|   x, | ||||
|   y, | ||||
| ]: P): PolarCoords => [Math.hypot(x, y), Math.atan2(y, x)]; | ||||
|  | ||||
| export function degreesToRadians(degrees: Degrees): Radians { | ||||
|   return ((degrees * Math.PI) / 180) as Radians; | ||||
| } | ||||
|  | ||||
| export function radiansToDegrees(degrees: Radians): Degrees { | ||||
|   return ((degrees * 180) / Math.PI) as Degrees; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Determines if the provided angle is a right angle. | ||||
|  * | ||||
|  * @param rads The angle to measure | ||||
|  * @returns TRUE if the provided angle is a right angle | ||||
|  */ | ||||
| export function isRightAngleRads(rads: Radians): boolean { | ||||
|   return Math.abs(Math.sin(2 * rads)) < PRECISION; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Márk Tolmács
					Márk Tolmács