| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*  math_defs.h                                                          */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*                       This file is part of:                           */ | 
					
						
							|  |  |  | /*                           GODOT ENGINE                                */ | 
					
						
							| 
									
										
										
										
											2017-08-27 14:16:55 +02:00
										 |  |  | /*                      https://godotengine.org                          */ | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2022-01-03 21:27:34 +01:00
										 |  |  | /* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur.                 */ | 
					
						
							|  |  |  | /* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md).   */ | 
					
						
							| 
									
										
										
										
											2014-02-09 22:10:30 -03:00
										 |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* Permission is hereby granted, free of charge, to any person obtaining */ | 
					
						
							|  |  |  | /* a copy of this software and associated documentation files (the       */ | 
					
						
							|  |  |  | /* "Software"), to deal in the Software without restriction, including   */ | 
					
						
							|  |  |  | /* without limitation the rights to use, copy, modify, merge, publish,   */ | 
					
						
							|  |  |  | /* distribute, sublicense, and/or sell copies of the Software, and to    */ | 
					
						
							|  |  |  | /* permit persons to whom the Software is furnished to do so, subject to */ | 
					
						
							|  |  |  | /* the following conditions:                                             */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* The above copyright notice and this permission notice shall be        */ | 
					
						
							|  |  |  | /* included in all copies or substantial portions of the Software.       */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */ | 
					
						
							|  |  |  | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */ | 
					
						
							|  |  |  | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ | 
					
						
							|  |  |  | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */ | 
					
						
							|  |  |  | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */ | 
					
						
							|  |  |  | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */ | 
					
						
							|  |  |  | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2018-01-05 00:50:27 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-18 14:38:54 -03:00
										 |  |  | #ifndef MATH_DEFS_H
 | 
					
						
							|  |  |  | #define MATH_DEFS_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define CMP_EPSILON 0.00001
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | #define CMP_EPSILON2 (CMP_EPSILON * CMP_EPSILON)
 | 
					
						
							| 
									
										
										
										
											2019-02-25 21:46:24 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-18 14:38:54 -03:00
										 |  |  | #define CMP_NORMALIZE_TOLERANCE 0.000001
 | 
					
						
							|  |  |  | #define CMP_POINT_IN_PLANE_EPSILON 0.00001
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-20 13:09:17 -05:00
										 |  |  | #define Math_SQRT12 0.7071067811865475244008443621048490
 | 
					
						
							|  |  |  | #define Math_SQRT2 1.4142135623730950488016887242
 | 
					
						
							|  |  |  | #define Math_LN2 0.6931471805599453094172321215
 | 
					
						
							|  |  |  | #define Math_TAU 6.2831853071795864769252867666
 | 
					
						
							|  |  |  | #define Math_PI 3.1415926535897932384626433833
 | 
					
						
							|  |  |  | #define Math_E 2.7182818284590452353602874714
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-05 17:47:13 -05:00
										 |  |  | #ifdef DEBUG_ENABLED
 | 
					
						
							|  |  |  | #define MATH_CHECKS
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-25 21:46:24 -03:00
										 |  |  | //this epsilon is for values related to a unit size (scalar or vector len)
 | 
					
						
							|  |  |  | #ifdef PRECISE_MATH_CHECKS
 | 
					
						
							|  |  |  | #define UNIT_EPSILON 0.00001
 | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | //tolerate some more floating point error normally
 | 
					
						
							|  |  |  | #define UNIT_EPSILON 0.001
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | #define USEC_TO_SEC(m_usec) ((m_usec) / 1000000.0)
 | 
					
						
							| 
									
										
										
										
											2015-04-18 14:38:54 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | enum ClockDirection { | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 	CLOCKWISE, | 
					
						
							| 
									
										
										
										
											2015-04-18 14:38:54 -03:00
										 |  |  | 	COUNTERCLOCKWISE | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-20 13:09:17 -05:00
										 |  |  | enum Orientation { | 
					
						
							|  |  |  | 	HORIZONTAL, | 
					
						
							|  |  |  | 	VERTICAL | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2015-04-18 14:38:54 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-24 20:58:47 -06:00
										 |  |  | enum HorizontalAlignment { | 
					
						
							|  |  |  | 	HORIZONTAL_ALIGNMENT_LEFT, | 
					
						
							|  |  |  | 	HORIZONTAL_ALIGNMENT_CENTER, | 
					
						
							|  |  |  | 	HORIZONTAL_ALIGNMENT_RIGHT, | 
					
						
							|  |  |  | 	HORIZONTAL_ALIGNMENT_FILL, | 
					
						
							| 
									
										
										
										
											2018-07-20 13:09:17 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-24 20:58:47 -06:00
										 |  |  | enum VerticalAlignment { | 
					
						
							|  |  |  | 	VERTICAL_ALIGNMENT_TOP, | 
					
						
							|  |  |  | 	VERTICAL_ALIGNMENT_CENTER, | 
					
						
							|  |  |  | 	VERTICAL_ALIGNMENT_BOTTOM, | 
					
						
							|  |  |  | 	VERTICAL_ALIGNMENT_FILL, | 
					
						
							| 
									
										
										
										
											2018-07-20 13:09:17 -05:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2015-04-18 14:38:54 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-24 20:58:47 -06:00
										 |  |  | enum InlineAlignment { | 
					
						
							| 
									
										
										
										
											2021-06-14 10:11:37 +03:00
										 |  |  | 	// Image alignment points.
 | 
					
						
							| 
									
										
										
										
											2021-11-24 20:58:47 -06:00
										 |  |  | 	INLINE_ALIGNMENT_TOP_TO = 0b0000, | 
					
						
							|  |  |  | 	INLINE_ALIGNMENT_CENTER_TO = 0b0001, | 
					
						
							| 
									
										
										
										
											2022-12-08 22:01:07 +02:00
										 |  |  | 	INLINE_ALIGNMENT_BASELINE_TO = 0b0011, | 
					
						
							| 
									
										
										
										
											2021-11-24 20:58:47 -06:00
										 |  |  | 	INLINE_ALIGNMENT_BOTTOM_TO = 0b0010, | 
					
						
							|  |  |  | 	INLINE_ALIGNMENT_IMAGE_MASK = 0b0011, | 
					
						
							| 
									
										
										
										
											2021-06-14 10:11:37 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Text alignment points.
 | 
					
						
							| 
									
										
										
										
											2021-11-24 20:58:47 -06:00
										 |  |  | 	INLINE_ALIGNMENT_TO_TOP = 0b0000, | 
					
						
							|  |  |  | 	INLINE_ALIGNMENT_TO_CENTER = 0b0100, | 
					
						
							|  |  |  | 	INLINE_ALIGNMENT_TO_BASELINE = 0b1000, | 
					
						
							|  |  |  | 	INLINE_ALIGNMENT_TO_BOTTOM = 0b1100, | 
					
						
							|  |  |  | 	INLINE_ALIGNMENT_TEXT_MASK = 0b1100, | 
					
						
							| 
									
										
										
										
											2021-06-14 10:11:37 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// Presets.
 | 
					
						
							| 
									
										
										
										
											2021-11-24 20:58:47 -06:00
										 |  |  | 	INLINE_ALIGNMENT_TOP = INLINE_ALIGNMENT_TOP_TO | INLINE_ALIGNMENT_TO_TOP, | 
					
						
							|  |  |  | 	INLINE_ALIGNMENT_CENTER = INLINE_ALIGNMENT_CENTER_TO | INLINE_ALIGNMENT_TO_CENTER, | 
					
						
							|  |  |  | 	INLINE_ALIGNMENT_BOTTOM = INLINE_ALIGNMENT_BOTTOM_TO | INLINE_ALIGNMENT_TO_BOTTOM | 
					
						
							| 
									
										
										
										
											2021-06-14 10:11:37 +03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-22 16:24:29 +00:00
										 |  |  | enum Side { | 
					
						
							|  |  |  | 	SIDE_LEFT, | 
					
						
							|  |  |  | 	SIDE_TOP, | 
					
						
							|  |  |  | 	SIDE_RIGHT, | 
					
						
							|  |  |  | 	SIDE_BOTTOM | 
					
						
							| 
									
										
										
										
											2018-07-20 13:09:17 -05:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | enum Corner { | 
					
						
							|  |  |  | 	CORNER_TOP_LEFT, | 
					
						
							|  |  |  | 	CORNER_TOP_RIGHT, | 
					
						
							|  |  |  | 	CORNER_BOTTOM_RIGHT, | 
					
						
							|  |  |  | 	CORNER_BOTTOM_LEFT | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-01 21:53:12 -05:00
										 |  |  | enum class EulerOrder { | 
					
						
							|  |  |  | 	XYZ, | 
					
						
							|  |  |  | 	XZY, | 
					
						
							|  |  |  | 	YXZ, | 
					
						
							|  |  |  | 	YZX, | 
					
						
							|  |  |  | 	ZXY, | 
					
						
							|  |  |  | 	ZYX | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-20 13:09:17 -05:00
										 |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2021-10-28 15:43:36 +02:00
										 |  |  |  * The "Real" type is an abstract type used for real numbers, such as 1.5, | 
					
						
							|  |  |  |  * in contrast to integer numbers. Precision can be controlled with the | 
					
						
							|  |  |  |  * presence or absence of the REAL_T_IS_DOUBLE define. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-07-20 13:09:17 -05:00
										 |  |  | #ifdef REAL_T_IS_DOUBLE
 | 
					
						
							|  |  |  | typedef double real_t; | 
					
						
							|  |  |  | #else
 | 
					
						
							|  |  |  | typedef float real_t; | 
					
						
							| 
									
										
										
										
											2015-04-18 14:38:54 -03:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // MATH_DEFS_H
 |