coordinate-system 5.2.0__tar.gz → 5.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. {coordinate_system-5.2.0/coordinate_system.egg-info → coordinate_system-5.2.1}/PKG-INFO +10 -3
  2. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/README.md +9 -2
  3. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/coordinate_system/__init__.py +8 -0
  4. {coordinate_system-5.2.0 → coordinate_system-5.2.1/coordinate_system.egg-info}/PKG-INFO +10 -3
  5. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/coordinate_system_binding.cpp +26 -0
  6. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/pmsys_minimal.hpp +35 -6
  7. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/setup.py +2 -2
  8. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/LICENSE +0 -0
  9. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/MANIFEST.in +0 -0
  10. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/MATHEMATICAL_FOUNDATION.md +0 -0
  11. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/coordinate_system/curvature.py +0 -0
  12. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/coordinate_system/curve_interpolation.py +0 -0
  13. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/coordinate_system/differential_geometry.py +0 -0
  14. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/coordinate_system/fourier_frames.py +0 -0
  15. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/coordinate_system/fourier_spectral.py +0 -0
  16. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/coordinate_system/visualization.py +0 -0
  17. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/coordinate_system.egg-info/SOURCES.txt +0 -0
  18. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/coordinate_system.egg-info/dependency_links.txt +0 -0
  19. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/coordinate_system.egg-info/not-zip-safe +0 -0
  20. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/coordinate_system.egg-info/requires.txt +0 -0
  21. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/coordinate_system.egg-info/top_level.txt +0 -0
  22. {coordinate_system-5.2.0 → coordinate_system-5.2.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: coordinate_system
3
- Version: 5.2.0
3
+ Version: 5.2.1
4
4
  Summary: High-performance 3D coordinate system with C2-continuous curve interpolation, Fourier frames with operator overloading, and advanced 3D visualization
5
5
  Home-page: https://github.com/panguojun/Coordinate-System
6
6
  Author: PanGuoJun
@@ -50,13 +50,13 @@ Requires-Dist: matplotlib>=3.3.0
50
50
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
51
51
 
52
52
  **Author:** PanGuoJun
53
- **Version:** 5.2.0
53
+ **Version:** 5.2.1
54
54
  **License:** MIT
55
55
 
56
56
 
57
57
  ---
58
58
 
59
- ## What's New in v5.2.0 (2025-12-01)
59
+ ## What's New in v5.2.1 (2025-12-01)
60
60
 
61
61
  ### Fourier Frames with Operator Overloading
62
62
 
@@ -94,6 +94,13 @@ Requires-Dist: matplotlib>=3.3.0
94
94
  - Full English documentation for global distribution
95
95
 
96
96
 
97
+
98
+ ### v5.2.1 (2025-12-01) - Handedness Control
99
+ - ✨ **New**: C++ level handedness control (`set_handedness('left'/'right')`)
100
+ - 🔧 **Fixed**: Frenet frames now respect coordinate system handedness
101
+ - 📚 **Improved**: Global handedness setting for consistent behavior
102
+
103
+
97
104
  ## 🆕 What's New in v4.0.0
98
105
 
99
106
  ### 🎯 Fourier Spectral Geometry Analysis
@@ -8,13 +8,13 @@
8
8
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
9
9
 
10
10
  **Author:** PanGuoJun
11
- **Version:** 5.2.0
11
+ **Version:** 5.2.1
12
12
  **License:** MIT
13
13
 
14
14
 
15
15
  ---
16
16
 
17
- ## What's New in v5.2.0 (2025-12-01)
17
+ ## What's New in v5.2.1 (2025-12-01)
18
18
 
19
19
  ### Fourier Frames with Operator Overloading
20
20
 
@@ -52,6 +52,13 @@
52
52
  - Full English documentation for global distribution
53
53
 
54
54
 
55
+
56
+ ### v5.2.1 (2025-12-01) - Handedness Control
57
+ - ✨ **New**: C++ level handedness control (`set_handedness('left'/'right')`)
58
+ - 🔧 **Fixed**: Frenet frames now respect coordinate system handedness
59
+ - 📚 **Improved**: Global handedness setting for consistent behavior
60
+
61
+
55
62
  ## 🆕 What's New in v4.0.0
56
63
 
57
64
  ### 🎯 Fourier Spectral Geometry Analysis
@@ -4,6 +4,14 @@ from .coordinate_system import vec3, vec2
4
4
  from .coordinate_system import quat
5
5
  from .coordinate_system import coord3
6
6
 
7
+
8
+ # Coordinate system handedness control (v5.2.1+)
9
+ from .coordinate_system import (
10
+ set_handedness,
11
+ get_handedness,
12
+ is_left_handed,
13
+ is_right_handed
14
+ )
7
15
  # Differential geometry module (v3.3.0+)
8
16
  from .differential_geometry import (
9
17
  # Classes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: coordinate_system
3
- Version: 5.2.0
3
+ Version: 5.2.1
4
4
  Summary: High-performance 3D coordinate system with C2-continuous curve interpolation, Fourier frames with operator overloading, and advanced 3D visualization
5
5
  Home-page: https://github.com/panguojun/Coordinate-System
6
6
  Author: PanGuoJun
@@ -50,13 +50,13 @@ Requires-Dist: matplotlib>=3.3.0
50
50
  [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
51
51
 
52
52
  **Author:** PanGuoJun
53
- **Version:** 5.2.0
53
+ **Version:** 5.2.1
54
54
  **License:** MIT
55
55
 
56
56
 
57
57
  ---
58
58
 
59
- ## What's New in v5.2.0 (2025-12-01)
59
+ ## What's New in v5.2.1 (2025-12-01)
60
60
 
61
61
  ### Fourier Frames with Operator Overloading
62
62
 
@@ -94,6 +94,13 @@ Requires-Dist: matplotlib>=3.3.0
94
94
  - Full English documentation for global distribution
95
95
 
96
96
 
97
+
98
+ ### v5.2.1 (2025-12-01) - Handedness Control
99
+ - ✨ **New**: C++ level handedness control (`set_handedness('left'/'right')`)
100
+ - 🔧 **Fixed**: Frenet frames now respect coordinate system handedness
101
+ - 📚 **Improved**: Global handedness setting for consistent behavior
102
+
103
+
97
104
  ## 🆕 What's New in v4.0.0
98
105
 
99
106
  ### 🎯 Fourier Spectral Geometry Analysis
@@ -535,4 +535,30 @@ PYBIND11_MODULE(coordinate_system, m) {
535
535
  m.attr("__version__") = "4.0.1";
536
536
  m.attr("__author__") = "PanGuoJun";
537
537
  m.attr("__coordinate_system__") = "right-handed";
538
+
539
+ // ===========================================================================
540
+ // Coordinate System Handedness Control
541
+ // ===========================================================================
542
+ m.def("set_handedness", [](const std::string& handedness) {
543
+ if (handedness == "left" || handedness == "LEFT") {
544
+ set_coordinate_handedness(true);
545
+ } else if (handedness == "right" || handedness == "RIGHT") {
546
+ set_coordinate_handedness(false);
547
+ } else {
548
+ throw std::invalid_argument("handedness must be 'left' or 'right'");
549
+ }
550
+ }, "Set coordinate system handedness ('left' or 'right')", py::arg("handedness"));
551
+
552
+ m.def("get_handedness", []() -> std::string {
553
+ return get_coordinate_handedness() ? "left" : "right";
554
+ }, "Get current coordinate system handedness");
555
+
556
+ m.def("is_left_handed", []() -> bool {
557
+ return get_coordinate_handedness();
558
+ }, "Check if using left-handed coordinate system");
559
+
560
+ m.def("is_right_handed", []() -> bool {
561
+ return !get_coordinate_handedness();
562
+ }, "Check if using right-handed coordinate system");
563
+
538
564
  }
@@ -148,6 +148,25 @@ inline real lerp(real h1, real h2, real alpha) {
148
148
  return h1 * (1.0 - alpha) + h2 * alpha;
149
149
  }
150
150
 
151
+ // ==============================================================================
152
+ // Coordinate System Handedness (Left/Right)
153
+ // ==============================================================================
154
+ namespace {
155
+ // Global handedness setting: true = left-handed (default), false = right-handed
156
+ bool g_use_left_handed_system = true;
157
+ }
158
+
159
+ // Set coordinate system handedness
160
+ inline void set_coordinate_handedness(bool use_left_handed) {
161
+ g_use_left_handed_system = use_left_handed;
162
+ }
163
+
164
+ // Get current coordinate system handedness
165
+ inline bool get_coordinate_handedness() {
166
+ return g_use_left_handed_system;
167
+ }
168
+
169
+
151
170
  inline real sign(real x) {
152
171
  return x < 0 ? -1.0 : (x > 0 ? 1.0 : 0.0);
153
172
  }
@@ -877,12 +896,22 @@ struct vector3
877
896
  }
878
897
  DEVICE_CALLABLE vector3 cross(const vector3& v) const
879
898
  {
880
- vector3 n;
881
- // 默认使用左手顺序!
882
- n.x = -(y * v.z - z * v.y);
883
- n.y = -(z * v.x - x * v.z);
884
- n.z = -(x * v.y - y * v.x);
885
- return n;
899
+ // Use global handedness setting
900
+ if (g_use_left_handed_system) {
901
+ // Left-handed system
902
+ vector3 n;
903
+ n.x = -(y * v.z - z * v.y);
904
+ n.y = -(z * v.x - x * v.z);
905
+ n.z = -(x * v.y - y * v.x);
906
+ return n;
907
+ } else {
908
+ // Right-handed system
909
+ vector3 n;
910
+ n.x = (y * v.z - z * v.y);
911
+ n.y = (z * v.x - x * v.z);
912
+ n.z = (x * v.y - y * v.x);
913
+ return n;
914
+ }
886
915
  }
887
916
  DEVICE_CALLABLE vector3 cross_left(const vector3& v) const
888
917
  {
@@ -2,7 +2,7 @@
2
2
  setup.py - Cross-platform setup for coordinate_system package
3
3
 
4
4
  Author: PanGuoJun
5
- Version: 5.2.0
5
+ Version: 5.2.1
6
6
  License: MIT
7
7
  """
8
8
 
@@ -69,7 +69,7 @@ ext_modules = [
69
69
 
70
70
  setup(
71
71
  name='coordinate_system',
72
- version='5.2.0',
72
+ version='5.2.1',
73
73
  packages=find_packages(),
74
74
  ext_modules=ext_modules, # Add extension modules
75
75