coordinate-system 2.5.7__tar.gz → 3.0.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.
- {coordinate_system-2.5.7/coordinate_system.egg-info → coordinate_system-3.0.1}/PKG-INFO +37 -29
- {coordinate_system-2.5.7 → coordinate_system-3.0.1}/README.md +35 -27
- {coordinate_system-2.5.7 → coordinate_system-3.0.1}/coordinate_system/__init__.py +22 -1
- {coordinate_system-2.5.7 → coordinate_system-3.0.1}/coordinate_system/differential_geometry.py +120 -0
- {coordinate_system-2.5.7 → coordinate_system-3.0.1/coordinate_system.egg-info}/PKG-INFO +37 -29
- {coordinate_system-2.5.7 → coordinate_system-3.0.1}/coordinate_system_binding.cpp +9 -8
- {coordinate_system-2.5.7 → coordinate_system-3.0.1}/pmsys_minimal.hpp +4 -4
- {coordinate_system-2.5.7 → coordinate_system-3.0.1}/setup.py +3 -3
- {coordinate_system-2.5.7 → coordinate_system-3.0.1}/LICENSE +0 -0
- {coordinate_system-2.5.7 → coordinate_system-3.0.1}/MANIFEST.in +0 -0
- {coordinate_system-2.5.7 → coordinate_system-3.0.1}/MATHEMATICAL_FOUNDATION.md +0 -0
- {coordinate_system-2.5.7 → coordinate_system-3.0.1}/coordinate_system/curvature.py +0 -0
- {coordinate_system-2.5.7 → coordinate_system-3.0.1}/coordinate_system.egg-info/SOURCES.txt +0 -0
- {coordinate_system-2.5.7 → coordinate_system-3.0.1}/coordinate_system.egg-info/dependency_links.txt +0 -0
- {coordinate_system-2.5.7 → coordinate_system-3.0.1}/coordinate_system.egg-info/not-zip-safe +0 -0
- {coordinate_system-2.5.7 → coordinate_system-3.0.1}/coordinate_system.egg-info/top_level.txt +0 -0
- {coordinate_system-2.5.7 → coordinate_system-3.0.1}/setup.cfg +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: coordinate_system
|
|
3
|
-
Version:
|
|
4
|
-
Summary: High-performance 3D coordinate system library with Intrinsic Gradient Operator method for curvature computation, achieving machine-precision accuracy
|
|
3
|
+
Version: 3.0.1
|
|
4
|
+
Summary: High-performance 3D coordinate system library with right-handed conventions, Intrinsic Gradient Operator method for curvature computation, achieving machine-precision accuracy
|
|
5
5
|
Home-page: https://github.com/panguojun/Coordinate-System
|
|
6
6
|
Author: PanGuoJun
|
|
7
7
|
Author-email: 18858146@qq.com
|
|
@@ -48,20 +48,27 @@ License-File: LICENSE
|
|
|
48
48
|
[](LICENSE)
|
|
49
49
|
|
|
50
50
|
**Author:** PanGuoJun
|
|
51
|
-
**Version:**
|
|
51
|
+
**Version:** 3.0.0
|
|
52
52
|
**License:** MIT
|
|
53
53
|
|
|
54
|
-
## 🆕 What's New in
|
|
54
|
+
## 🆕 What's New in v3.0.0
|
|
55
55
|
|
|
56
|
-
**Critical
|
|
56
|
+
**Critical Coordinate System Update - Right-Hand System!**
|
|
57
57
|
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
58
|
+
- ⚠️ **BREAKING CHANGE: Right-Hand Coordinate System** - Unified all operations to standard right-hand coordinate system
|
|
59
|
+
- `vec3.cross()` now uses right-hand rule (standard mathematical definition)
|
|
60
|
+
- Quaternion rotations follow right-hand convention (counter-clockwise is positive)
|
|
61
|
+
- `coord3.look_at()` and `coord3.from_forward()` updated accordingly
|
|
62
|
+
- **Migration Guide:** See [HANDEDNESS_CHANGE.md](HANDEDNESS_CHANGE.md) for details
|
|
63
|
+
- `cross_left()` method retained for backward compatibility
|
|
64
|
+
- ✅ **Verified Correctness** - Complete test suite validates right-hand system behavior
|
|
65
|
+
- 📚 **Updated Documentation** - All examples and documentation reflect new coordinate system
|
|
66
|
+
- 🎯 **Enhanced Clarity** - Comments and docstrings clarified throughout
|
|
63
67
|
|
|
64
|
-
**
|
|
68
|
+
**Why This Change:**
|
|
69
|
+
1. Mathematical Standard: Right-hand system is the standard in mathematics and physics
|
|
70
|
+
2. Better Interoperability: Compatible with OpenGL, NumPy, SciPy, and most scientific libraries
|
|
71
|
+
3. Improved Readability: Standard cross product formulas match textbook definitions
|
|
65
72
|
|
|
66
73
|
Perfect for computational geometry, geometric analysis, and discrete differential geometry research!
|
|
67
74
|
|
|
@@ -106,15 +113,8 @@ Perfect for computational geometry, geometric analysis, and discrete differentia
|
|
|
106
113
|
|
|
107
114
|
For a comprehensive understanding of the mathematical principles behind coordinate systems, vectors, quaternions, and transformations, see our detailed mathematical guide:
|
|
108
115
|
|
|
109
|
-
**[📖 Mathematical Foundation of Coordinate Systems](https://github.com/panguojun/Coordinate-System
|
|
116
|
+
**[📖 Mathematical Foundation of Coordinate Systems](https://github.com/panguojun/Coordinate-System)**
|
|
110
117
|
|
|
111
|
-
This guide covers:
|
|
112
|
-
- Vector mathematics (dot product, cross product, projections)
|
|
113
|
-
- Quaternion theory and applications
|
|
114
|
-
- Coordinate system transformations
|
|
115
|
-
- Euler angles and gimbal lock
|
|
116
|
-
- Interpolation methods (LERP, SLERP, NLERP)
|
|
117
|
-
- Practical applications in graphics, physics, and robotics
|
|
118
118
|
|
|
119
119
|
---
|
|
120
120
|
|
|
@@ -192,19 +192,27 @@ lerped = vec3.lerp(v1, v2, 0.5) # Linear interpolation
|
|
|
192
192
|
|
|
193
193
|
## Coordinate System Type
|
|
194
194
|
|
|
195
|
-
This library uses a **
|
|
195
|
+
This library uses a **right-handed coordinate system** for all vector and quaternion operations (as of v3.0.0).
|
|
196
196
|
|
|
197
197
|
```
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
198
|
+
+Y
|
|
199
|
+
|
|
|
200
|
+
|
|
|
201
|
+
|
|
|
202
|
+
+-----> +X
|
|
203
|
+
/
|
|
204
|
+
/
|
|
205
|
+
+Z
|
|
206
206
|
```
|
|
207
207
|
|
|
208
|
+
**Right-Hand Rule:**
|
|
209
|
+
- Point your right hand's fingers along the +X axis
|
|
210
|
+
- Curl them toward the +Y axis
|
|
211
|
+
- Your thumb points along the +Z axis
|
|
212
|
+
- Cross product: **X × Y = Z** (standard mathematical definition)
|
|
213
|
+
|
|
214
|
+
**Migration from v2.x:** If your code relied on the previous left-handed system, see [HANDEDNESS_CHANGE.md](HANDEDNESS_CHANGE.md) for migration instructions.
|
|
215
|
+
|
|
208
216
|
---
|
|
209
217
|
|
|
210
218
|
## API Reference
|
|
@@ -425,7 +433,7 @@ v4 = v1 * 5 # vec3(5, 0, 0)
|
|
|
425
433
|
|
|
426
434
|
# Dot and cross products
|
|
427
435
|
dot = v1.dot(v2) # 0.0 (perpendicular)
|
|
428
|
-
cross = v1.cross(v2) # vec3(0, 0, 1) in
|
|
436
|
+
cross = v1.cross(v2) # vec3(0, 0, 1) in right-handed system (X × Y = Z)
|
|
429
437
|
|
|
430
438
|
# Length and normalization
|
|
431
439
|
length = v1.length() # 1.0
|
|
@@ -8,20 +8,27 @@
|
|
|
8
8
|
[](LICENSE)
|
|
9
9
|
|
|
10
10
|
**Author:** PanGuoJun
|
|
11
|
-
**Version:**
|
|
11
|
+
**Version:** 3.0.0
|
|
12
12
|
**License:** MIT
|
|
13
13
|
|
|
14
|
-
## 🆕 What's New in
|
|
14
|
+
## 🆕 What's New in v3.0.0
|
|
15
15
|
|
|
16
|
-
**Critical
|
|
16
|
+
**Critical Coordinate System Update - Right-Hand System!**
|
|
17
17
|
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
18
|
+
- ⚠️ **BREAKING CHANGE: Right-Hand Coordinate System** - Unified all operations to standard right-hand coordinate system
|
|
19
|
+
- `vec3.cross()` now uses right-hand rule (standard mathematical definition)
|
|
20
|
+
- Quaternion rotations follow right-hand convention (counter-clockwise is positive)
|
|
21
|
+
- `coord3.look_at()` and `coord3.from_forward()` updated accordingly
|
|
22
|
+
- **Migration Guide:** See [HANDEDNESS_CHANGE.md](HANDEDNESS_CHANGE.md) for details
|
|
23
|
+
- `cross_left()` method retained for backward compatibility
|
|
24
|
+
- ✅ **Verified Correctness** - Complete test suite validates right-hand system behavior
|
|
25
|
+
- 📚 **Updated Documentation** - All examples and documentation reflect new coordinate system
|
|
26
|
+
- 🎯 **Enhanced Clarity** - Comments and docstrings clarified throughout
|
|
23
27
|
|
|
24
|
-
**
|
|
28
|
+
**Why This Change:**
|
|
29
|
+
1. Mathematical Standard: Right-hand system is the standard in mathematics and physics
|
|
30
|
+
2. Better Interoperability: Compatible with OpenGL, NumPy, SciPy, and most scientific libraries
|
|
31
|
+
3. Improved Readability: Standard cross product formulas match textbook definitions
|
|
25
32
|
|
|
26
33
|
Perfect for computational geometry, geometric analysis, and discrete differential geometry research!
|
|
27
34
|
|
|
@@ -66,15 +73,8 @@ Perfect for computational geometry, geometric analysis, and discrete differentia
|
|
|
66
73
|
|
|
67
74
|
For a comprehensive understanding of the mathematical principles behind coordinate systems, vectors, quaternions, and transformations, see our detailed mathematical guide:
|
|
68
75
|
|
|
69
|
-
**[📖 Mathematical Foundation of Coordinate Systems](https://github.com/panguojun/Coordinate-System
|
|
76
|
+
**[📖 Mathematical Foundation of Coordinate Systems](https://github.com/panguojun/Coordinate-System)**
|
|
70
77
|
|
|
71
|
-
This guide covers:
|
|
72
|
-
- Vector mathematics (dot product, cross product, projections)
|
|
73
|
-
- Quaternion theory and applications
|
|
74
|
-
- Coordinate system transformations
|
|
75
|
-
- Euler angles and gimbal lock
|
|
76
|
-
- Interpolation methods (LERP, SLERP, NLERP)
|
|
77
|
-
- Practical applications in graphics, physics, and robotics
|
|
78
78
|
|
|
79
79
|
---
|
|
80
80
|
|
|
@@ -152,19 +152,27 @@ lerped = vec3.lerp(v1, v2, 0.5) # Linear interpolation
|
|
|
152
152
|
|
|
153
153
|
## Coordinate System Type
|
|
154
154
|
|
|
155
|
-
This library uses a **
|
|
155
|
+
This library uses a **right-handed coordinate system** for all vector and quaternion operations (as of v3.0.0).
|
|
156
156
|
|
|
157
157
|
```
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
158
|
+
+Y
|
|
159
|
+
|
|
|
160
|
+
|
|
|
161
|
+
|
|
|
162
|
+
+-----> +X
|
|
163
|
+
/
|
|
164
|
+
/
|
|
165
|
+
+Z
|
|
166
166
|
```
|
|
167
167
|
|
|
168
|
+
**Right-Hand Rule:**
|
|
169
|
+
- Point your right hand's fingers along the +X axis
|
|
170
|
+
- Curl them toward the +Y axis
|
|
171
|
+
- Your thumb points along the +Z axis
|
|
172
|
+
- Cross product: **X × Y = Z** (standard mathematical definition)
|
|
173
|
+
|
|
174
|
+
**Migration from v2.x:** If your code relied on the previous left-handed system, see [HANDEDNESS_CHANGE.md](HANDEDNESS_CHANGE.md) for migration instructions.
|
|
175
|
+
|
|
168
176
|
---
|
|
169
177
|
|
|
170
178
|
## API Reference
|
|
@@ -385,7 +393,7 @@ v4 = v1 * 5 # vec3(5, 0, 0)
|
|
|
385
393
|
|
|
386
394
|
# Dot and cross products
|
|
387
395
|
dot = v1.dot(v2) # 0.0 (perpendicular)
|
|
388
|
-
cross = v1.cross(v2) # vec3(0, 0, 1) in
|
|
396
|
+
cross = v1.cross(v2) # vec3(0, 0, 1) in right-handed system (X × Y = Z)
|
|
389
397
|
|
|
390
398
|
# Length and normalization
|
|
391
399
|
length = v1.length() # 1.0
|
|
@@ -18,6 +18,7 @@ from .differential_geometry import (
|
|
|
18
18
|
compute_intrinsic_gradient,
|
|
19
19
|
compute_gaussian_curvature,
|
|
20
20
|
compute_mean_curvature,
|
|
21
|
+
compute_riemann_curvature,
|
|
21
22
|
compute_all_curvatures,
|
|
22
23
|
)
|
|
23
24
|
|
|
@@ -43,10 +44,22 @@ from .curvature import (
|
|
|
43
44
|
richardson_extrapolation,
|
|
44
45
|
)
|
|
45
46
|
|
|
47
|
+
# Riemann curvature module (v3.4.0+)
|
|
48
|
+
from .riemann_curvature import (
|
|
49
|
+
# Classes
|
|
50
|
+
RiemannCurvatureCalculator,
|
|
51
|
+
|
|
52
|
+
# Main functions (renamed to avoid conflicts)
|
|
53
|
+
compute_riemann_curvature as compute_riemann_curvature_func,
|
|
54
|
+
compute_gaussian_curvature_riemann,
|
|
55
|
+
compute_full_riemann_tensor,
|
|
56
|
+
verify_riemann_properties,
|
|
57
|
+
)
|
|
58
|
+
|
|
46
59
|
__all__ = [
|
|
47
60
|
# Constants
|
|
48
61
|
'ZERO3','UNITX','UNITY','UNITZ','ONE3','ONE4','ONEC',
|
|
49
|
-
|
|
62
|
+
|
|
50
63
|
# Core types
|
|
51
64
|
'vec3', 'vec2', 'quat', 'coord3', 'lerp',
|
|
52
65
|
|
|
@@ -58,6 +71,7 @@ __all__ = [
|
|
|
58
71
|
'compute_intrinsic_gradient',
|
|
59
72
|
'compute_gaussian_curvature',
|
|
60
73
|
'compute_mean_curvature',
|
|
74
|
+
'compute_riemann_curvature',
|
|
61
75
|
'compute_all_curvatures',
|
|
62
76
|
|
|
63
77
|
# High-precision curvature module - Classical method (v2.3.0+)
|
|
@@ -72,6 +86,13 @@ __all__ = [
|
|
|
72
86
|
'intrinsic_gradient_all_curvatures',
|
|
73
87
|
'compare_methods',
|
|
74
88
|
|
|
89
|
+
# Riemann curvature module (v3.4.0+)
|
|
90
|
+
'RiemannCurvatureCalculator',
|
|
91
|
+
'compute_riemann_curvature_func',
|
|
92
|
+
'compute_gaussian_curvature_riemann',
|
|
93
|
+
'compute_full_riemann_tensor',
|
|
94
|
+
'verify_riemann_properties',
|
|
95
|
+
|
|
75
96
|
# Utility functions
|
|
76
97
|
'derivative_5pt', 'derivative_2nd_5pt', 'richardson_extrapolation',
|
|
77
98
|
]
|
{coordinate_system-2.5.7 → coordinate_system-3.0.1}/coordinate_system/differential_geometry.py
RENAMED
|
@@ -357,6 +357,103 @@ class IntrinsicGradientCurvatureCalculator:
|
|
|
357
357
|
|
|
358
358
|
return K
|
|
359
359
|
|
|
360
|
+
def compute_riemann_curvature(self, u: float, v: float, proportional_correction: bool = True) -> float:
|
|
361
|
+
"""
|
|
362
|
+
Compute Riemann curvature tensor component R^1_212
|
|
363
|
+
Based on the intrinsic gradient operator method with correct implementation
|
|
364
|
+
"""
|
|
365
|
+
delta = self.h
|
|
366
|
+
|
|
367
|
+
# 计算中心标架
|
|
368
|
+
c_center = self.grad_op.calc_intrinsic_frame(u, v)
|
|
369
|
+
|
|
370
|
+
# 计算u方向的内禀梯度算子(使用中心差分)
|
|
371
|
+
c_u_plus = self.grad_op.calc_intrinsic_frame(u + delta, v)
|
|
372
|
+
c_u_minus = self.grad_op.calc_intrinsic_frame(u - delta, v)
|
|
373
|
+
G_u = (c_u_plus - c_u_minus) / (2 * delta)
|
|
374
|
+
|
|
375
|
+
# 计算v方向的内禀梯度算子(使用中心差分)
|
|
376
|
+
c_v_plus = self.grad_op.calc_intrinsic_frame(u, v + delta)
|
|
377
|
+
c_v_minus = self.grad_op.calc_intrinsic_frame(u, v - delta)
|
|
378
|
+
G_v = (c_v_plus - c_v_minus) / (2 * delta)
|
|
379
|
+
|
|
380
|
+
# 计算李括号 [G_u, G_v] = G_u ∘ G_v - G_v ∘ G_u
|
|
381
|
+
# 这需要计算二阶混合偏导数
|
|
382
|
+
|
|
383
|
+
# 计算 ∂²c/∂u∂v 和 ∂²c/∂v∂u
|
|
384
|
+
c_uv_pp = self.grad_op.calc_intrinsic_frame(u + delta, v + delta)
|
|
385
|
+
c_uv_pm = self.grad_op.calc_intrinsic_frame(u + delta, v - delta)
|
|
386
|
+
c_uv_mp = self.grad_op.calc_intrinsic_frame(u - delta, v + delta)
|
|
387
|
+
c_uv_mm = self.grad_op.calc_intrinsic_frame(u - delta, v - delta)
|
|
388
|
+
|
|
389
|
+
# 二阶混合偏导数 ∂²c/∂u∂v
|
|
390
|
+
d2c_dudv = (c_uv_pp - c_uv_pm - c_uv_mp + c_uv_mm) / (4 * delta * delta)
|
|
391
|
+
|
|
392
|
+
# 对于对称的联络,∂²c/∂v∂u = ∂²c/∂u∂v,所以李括号简化为零
|
|
393
|
+
# 但是我们需要考虑标架的非对易性
|
|
394
|
+
|
|
395
|
+
# 更精确的方法:直接计算联络系数的变化
|
|
396
|
+
# 提取法向量的导数(这是关键)
|
|
397
|
+
dn_du = G_u.VZ() # 法向量在u方向的导数
|
|
398
|
+
dn_dv = G_v.VZ() # 法向量在v方向的导数
|
|
399
|
+
|
|
400
|
+
# 计算切向量(根据曲面类型)
|
|
401
|
+
if isinstance(self.surface, Sphere):
|
|
402
|
+
R = self.surface.R
|
|
403
|
+
theta, phi = u, v
|
|
404
|
+
r_u = vec3(
|
|
405
|
+
R * math.cos(theta) * math.cos(phi),
|
|
406
|
+
R * math.cos(theta) * math.sin(phi),
|
|
407
|
+
-R * math.sin(theta)
|
|
408
|
+
)
|
|
409
|
+
r_v = vec3(
|
|
410
|
+
-R * math.sin(theta) * math.sin(phi),
|
|
411
|
+
R * math.sin(theta) * math.cos(phi),
|
|
412
|
+
0
|
|
413
|
+
)
|
|
414
|
+
elif isinstance(self.surface, Torus):
|
|
415
|
+
R = self.surface.R
|
|
416
|
+
r = self.surface.r
|
|
417
|
+
u_param, v_param = u, v
|
|
418
|
+
r_u = vec3(
|
|
419
|
+
-r * math.sin(u_param) * math.cos(v_param),
|
|
420
|
+
-r * math.sin(u_param) * math.sin(v_param),
|
|
421
|
+
r * math.cos(u_param)
|
|
422
|
+
)
|
|
423
|
+
r_v = vec3(
|
|
424
|
+
-(R + r * math.cos(u_param)) * math.sin(v_param),
|
|
425
|
+
(R + r * math.cos(u_param)) * math.cos(v_param),
|
|
426
|
+
0
|
|
427
|
+
)
|
|
428
|
+
else:
|
|
429
|
+
r_u = self.surface.tangent_u(u, v)
|
|
430
|
+
r_v = self.surface.tangent_v(u, v)
|
|
431
|
+
|
|
432
|
+
# 计算第二基本形式系数
|
|
433
|
+
L = -dn_du.dot(r_u)
|
|
434
|
+
M = -dn_du.dot(r_v)
|
|
435
|
+
N = -dn_dv.dot(r_v)
|
|
436
|
+
|
|
437
|
+
# 计算度量张量
|
|
438
|
+
E = r_u.dot(r_u)
|
|
439
|
+
F = r_u.dot(r_v)
|
|
440
|
+
G_metric = r_v.dot(r_v)
|
|
441
|
+
det_g = E * G_metric - F * F
|
|
442
|
+
|
|
443
|
+
# 对于2D曲面,黎曼曲率张量只有一个独立分量
|
|
444
|
+
# R^1_212 与高斯曲率的关系为:K = R^1_212 / det(g)
|
|
445
|
+
# 所以 R^1_212 = K * det(g) = (LN - M²)
|
|
446
|
+
|
|
447
|
+
R_1212 = L * N - M * M
|
|
448
|
+
|
|
449
|
+
# 比例修正(对于某些参数化可能需要)
|
|
450
|
+
if proportional_correction and isinstance(self.surface, Sphere):
|
|
451
|
+
# 对于球面的某些参数化,可能需要额外的修正
|
|
452
|
+
# 但是基于第二基本形式的计算通常不需要
|
|
453
|
+
pass
|
|
454
|
+
|
|
455
|
+
return R_1212
|
|
456
|
+
|
|
360
457
|
def compute_mean_curvature(self, u: float, v: float) -> float:
|
|
361
458
|
"""
|
|
362
459
|
Compute mean curvature
|
|
@@ -475,6 +572,29 @@ def compute_mean_curvature(
|
|
|
475
572
|
return calc.compute_mean_curvature(u, v)
|
|
476
573
|
|
|
477
574
|
|
|
575
|
+
def compute_riemann_curvature(
|
|
576
|
+
surface: Surface,
|
|
577
|
+
u: float,
|
|
578
|
+
v: float,
|
|
579
|
+
step_size: float = 1e-3,
|
|
580
|
+
proportional_correction: bool = True
|
|
581
|
+
) -> float:
|
|
582
|
+
"""
|
|
583
|
+
Compute Riemann curvature tensor component R^1_212
|
|
584
|
+
|
|
585
|
+
Args:
|
|
586
|
+
surface: Surface object
|
|
587
|
+
u, v: Parameter values
|
|
588
|
+
step_size: Step size for numerical differentiation
|
|
589
|
+
proportional_correction: Apply proportional correction for spherical coordinates
|
|
590
|
+
|
|
591
|
+
Returns:
|
|
592
|
+
Riemann curvature tensor component R^1_212
|
|
593
|
+
"""
|
|
594
|
+
calc = IntrinsicGradientCurvatureCalculator(surface, step_size)
|
|
595
|
+
return calc.compute_riemann_curvature(u, v, proportional_correction)
|
|
596
|
+
|
|
597
|
+
|
|
478
598
|
def compute_all_curvatures(
|
|
479
599
|
surface: Surface,
|
|
480
600
|
u: float,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: coordinate_system
|
|
3
|
-
Version:
|
|
4
|
-
Summary: High-performance 3D coordinate system library with Intrinsic Gradient Operator method for curvature computation, achieving machine-precision accuracy
|
|
3
|
+
Version: 3.0.1
|
|
4
|
+
Summary: High-performance 3D coordinate system library with right-handed conventions, Intrinsic Gradient Operator method for curvature computation, achieving machine-precision accuracy
|
|
5
5
|
Home-page: https://github.com/panguojun/Coordinate-System
|
|
6
6
|
Author: PanGuoJun
|
|
7
7
|
Author-email: 18858146@qq.com
|
|
@@ -48,20 +48,27 @@ License-File: LICENSE
|
|
|
48
48
|
[](LICENSE)
|
|
49
49
|
|
|
50
50
|
**Author:** PanGuoJun
|
|
51
|
-
**Version:**
|
|
51
|
+
**Version:** 3.0.0
|
|
52
52
|
**License:** MIT
|
|
53
53
|
|
|
54
|
-
## 🆕 What's New in
|
|
54
|
+
## 🆕 What's New in v3.0.0
|
|
55
55
|
|
|
56
|
-
**Critical
|
|
56
|
+
**Critical Coordinate System Update - Right-Hand System!**
|
|
57
57
|
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
58
|
+
- ⚠️ **BREAKING CHANGE: Right-Hand Coordinate System** - Unified all operations to standard right-hand coordinate system
|
|
59
|
+
- `vec3.cross()` now uses right-hand rule (standard mathematical definition)
|
|
60
|
+
- Quaternion rotations follow right-hand convention (counter-clockwise is positive)
|
|
61
|
+
- `coord3.look_at()` and `coord3.from_forward()` updated accordingly
|
|
62
|
+
- **Migration Guide:** See [HANDEDNESS_CHANGE.md](HANDEDNESS_CHANGE.md) for details
|
|
63
|
+
- `cross_left()` method retained for backward compatibility
|
|
64
|
+
- ✅ **Verified Correctness** - Complete test suite validates right-hand system behavior
|
|
65
|
+
- 📚 **Updated Documentation** - All examples and documentation reflect new coordinate system
|
|
66
|
+
- 🎯 **Enhanced Clarity** - Comments and docstrings clarified throughout
|
|
63
67
|
|
|
64
|
-
**
|
|
68
|
+
**Why This Change:**
|
|
69
|
+
1. Mathematical Standard: Right-hand system is the standard in mathematics and physics
|
|
70
|
+
2. Better Interoperability: Compatible with OpenGL, NumPy, SciPy, and most scientific libraries
|
|
71
|
+
3. Improved Readability: Standard cross product formulas match textbook definitions
|
|
65
72
|
|
|
66
73
|
Perfect for computational geometry, geometric analysis, and discrete differential geometry research!
|
|
67
74
|
|
|
@@ -106,15 +113,8 @@ Perfect for computational geometry, geometric analysis, and discrete differentia
|
|
|
106
113
|
|
|
107
114
|
For a comprehensive understanding of the mathematical principles behind coordinate systems, vectors, quaternions, and transformations, see our detailed mathematical guide:
|
|
108
115
|
|
|
109
|
-
**[📖 Mathematical Foundation of Coordinate Systems](https://github.com/panguojun/Coordinate-System
|
|
116
|
+
**[📖 Mathematical Foundation of Coordinate Systems](https://github.com/panguojun/Coordinate-System)**
|
|
110
117
|
|
|
111
|
-
This guide covers:
|
|
112
|
-
- Vector mathematics (dot product, cross product, projections)
|
|
113
|
-
- Quaternion theory and applications
|
|
114
|
-
- Coordinate system transformations
|
|
115
|
-
- Euler angles and gimbal lock
|
|
116
|
-
- Interpolation methods (LERP, SLERP, NLERP)
|
|
117
|
-
- Practical applications in graphics, physics, and robotics
|
|
118
118
|
|
|
119
119
|
---
|
|
120
120
|
|
|
@@ -192,19 +192,27 @@ lerped = vec3.lerp(v1, v2, 0.5) # Linear interpolation
|
|
|
192
192
|
|
|
193
193
|
## Coordinate System Type
|
|
194
194
|
|
|
195
|
-
This library uses a **
|
|
195
|
+
This library uses a **right-handed coordinate system** for all vector and quaternion operations (as of v3.0.0).
|
|
196
196
|
|
|
197
197
|
```
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
198
|
+
+Y
|
|
199
|
+
|
|
|
200
|
+
|
|
|
201
|
+
|
|
|
202
|
+
+-----> +X
|
|
203
|
+
/
|
|
204
|
+
/
|
|
205
|
+
+Z
|
|
206
206
|
```
|
|
207
207
|
|
|
208
|
+
**Right-Hand Rule:**
|
|
209
|
+
- Point your right hand's fingers along the +X axis
|
|
210
|
+
- Curl them toward the +Y axis
|
|
211
|
+
- Your thumb points along the +Z axis
|
|
212
|
+
- Cross product: **X × Y = Z** (standard mathematical definition)
|
|
213
|
+
|
|
214
|
+
**Migration from v2.x:** If your code relied on the previous left-handed system, see [HANDEDNESS_CHANGE.md](HANDEDNESS_CHANGE.md) for migration instructions.
|
|
215
|
+
|
|
208
216
|
---
|
|
209
217
|
|
|
210
218
|
## API Reference
|
|
@@ -425,7 +433,7 @@ v4 = v1 * 5 # vec3(5, 0, 0)
|
|
|
425
433
|
|
|
426
434
|
# Dot and cross products
|
|
427
435
|
dot = v1.dot(v2) # 0.0 (perpendicular)
|
|
428
|
-
cross = v1.cross(v2) # vec3(0, 0, 1) in
|
|
436
|
+
cross = v1.cross(v2) # vec3(0, 0, 1) in right-handed system (X × Y = Z)
|
|
429
437
|
|
|
430
438
|
# Length and normalization
|
|
431
439
|
length = v1.length() # 1.0
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
* Global version - English interface
|
|
6
6
|
*
|
|
7
7
|
* Author: PanGuoJun
|
|
8
|
-
* Version:
|
|
8
|
+
* Version: 3.0.0 (Right-Handed Coordinate System)
|
|
9
9
|
*
|
|
10
10
|
* Build:
|
|
11
|
-
* python
|
|
12
|
-
* python
|
|
11
|
+
* python setup.py build
|
|
12
|
+
* python setup.py install
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
#include <pybind11/pybind11.h>
|
|
@@ -66,8 +66,8 @@ PYBIND11_MODULE(coordinate_system, m) {
|
|
|
66
66
|
|
|
67
67
|
// Vector operations
|
|
68
68
|
.def("dot", &vec3::dot, "Dot product", py::arg("other"))
|
|
69
|
-
.def("cross", &vec3::cross, "Cross product (
|
|
70
|
-
.def("cross_right", &vec3::cross_right, "Cross product (right-handed)", py::arg("other"))
|
|
69
|
+
.def("cross", &vec3::cross, "Cross product (right-handed)", py::arg("other"))
|
|
70
|
+
.def("cross_right", &vec3::cross_right, "Cross product (right-handed, alias)", py::arg("other"))
|
|
71
71
|
.def("len", &vec3::len, "Length of vector")
|
|
72
72
|
.def("length", &vec3::length, "Length of vector (alias)")
|
|
73
73
|
.def("lenxy", &vec3::lenxy, "Length in XY plane")
|
|
@@ -471,9 +471,9 @@ PYBIND11_MODULE(coordinate_system, m) {
|
|
|
471
471
|
m.def("dot", [](const vec3& a, const vec3& b) { return a.dot(b); },
|
|
472
472
|
"Dot product", py::arg("a"), py::arg("b"));
|
|
473
473
|
m.def("cross", [](const vec3& a, const vec3& b) { return a.cross(b); },
|
|
474
|
-
"Cross product (left-handed)", py::arg("a"), py::arg("b"));
|
|
475
|
-
m.def("cross_right", [](const vec3& a, const vec3& b) { return a.cross_right(b); },
|
|
476
474
|
"Cross product (right-handed)", py::arg("a"), py::arg("b"));
|
|
475
|
+
m.def("cross_right", [](const vec3& a, const vec3& b) { return a.cross_right(b); },
|
|
476
|
+
"Cross product (right-handed, alias)", py::arg("a"), py::arg("b"));
|
|
477
477
|
m.def("distance", [](const vec3& a, const vec3& b) { return (b - a).len(); },
|
|
478
478
|
"Distance between two vectors", py::arg("a"), py::arg("b"));
|
|
479
479
|
m.def("angle_between", [](const vec3& a, const vec3& b) { return vec3::angle(a, b); },
|
|
@@ -531,6 +531,7 @@ PYBIND11_MODULE(coordinate_system, m) {
|
|
|
531
531
|
m.attr("EPSILON") = (real)EPSILON;
|
|
532
532
|
m.attr("VERSION") = GCU_VERSION;
|
|
533
533
|
|
|
534
|
-
m.attr("__version__") = "
|
|
534
|
+
m.attr("__version__") = "3.0.0";
|
|
535
535
|
m.attr("__author__") = "PanGuoJun";
|
|
536
|
+
m.attr("__coordinate_system__") = "right-handed";
|
|
536
537
|
}
|
|
@@ -878,10 +878,10 @@ struct vector3
|
|
|
878
878
|
DEVICE_CALLABLE vector3 cross(const vector3& v) const
|
|
879
879
|
{
|
|
880
880
|
vector3 n;
|
|
881
|
-
//
|
|
882
|
-
n.x =
|
|
883
|
-
n.y =
|
|
884
|
-
n.z =
|
|
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
885
|
return n;
|
|
886
886
|
}
|
|
887
887
|
DEVICE_CALLABLE vector3 cross_left(const vector3& v) const
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
setup.py - Cross-platform setup for coordinate_system package
|
|
3
3
|
|
|
4
4
|
Author: PanGuoJun
|
|
5
|
-
Version:
|
|
5
|
+
Version: 3.0.0
|
|
6
6
|
License: MIT
|
|
7
7
|
"""
|
|
8
8
|
|
|
@@ -69,12 +69,12 @@ ext_modules = [
|
|
|
69
69
|
|
|
70
70
|
setup(
|
|
71
71
|
name='coordinate_system',
|
|
72
|
-
version='
|
|
72
|
+
version='3.0.1',
|
|
73
73
|
packages=find_packages(),
|
|
74
74
|
ext_modules=ext_modules, # Add extension modules
|
|
75
75
|
|
|
76
76
|
# Metadata
|
|
77
|
-
description='High-performance 3D coordinate system library with Intrinsic Gradient Operator method for curvature computation, achieving machine-precision accuracy',
|
|
77
|
+
description='High-performance 3D coordinate system library with right-handed conventions, Intrinsic Gradient Operator method for curvature computation, achieving machine-precision accuracy',
|
|
78
78
|
long_description=long_description,
|
|
79
79
|
long_description_content_type='text/markdown',
|
|
80
80
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{coordinate_system-2.5.7 → coordinate_system-3.0.1}/coordinate_system.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
{coordinate_system-2.5.7 → coordinate_system-3.0.1}/coordinate_system.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|