pygeodesy 24.4.4__py2.py3-none-any.whl → 24.4.18__py2.py3-none-any.whl
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.
- {PyGeodesy-24.4.4.dist-info → PyGeodesy-24.4.18.dist-info}/METADATA +6 -6
- {PyGeodesy-24.4.4.dist-info → PyGeodesy-24.4.18.dist-info}/RECORD +40 -40
- pygeodesy/__init__.py +1 -1
- pygeodesy/albers.py +20 -27
- pygeodesy/auxilats/auxLat.py +3 -3
- pygeodesy/azimuthal.py +9 -8
- pygeodesy/deprecated/__init__.py +1 -1
- pygeodesy/deprecated/classes.py +14 -1
- pygeodesy/ecef.py +4 -4
- pygeodesy/ellipsoidalBase.py +2 -3
- pygeodesy/ellipsoids.py +4 -4
- pygeodesy/elliptic.py +27 -26
- pygeodesy/errors.py +27 -28
- pygeodesy/etm.py +3 -3
- pygeodesy/fmath.py +64 -65
- pygeodesy/frechet.py +6 -6
- pygeodesy/fstats.py +3 -4
- pygeodesy/fsums.py +506 -396
- pygeodesy/geodesicw.py +2 -2
- pygeodesy/geodsolve.py +4 -3
- pygeodesy/geoids.py +4 -4
- pygeodesy/hausdorff.py +5 -5
- pygeodesy/heights.py +6 -6
- pygeodesy/latlonBase.py +6 -6
- pygeodesy/lazily.py +3 -3
- pygeodesy/ltp.py +11 -11
- pygeodesy/ltpTuples.py +3 -4
- pygeodesy/named.py +14 -3
- pygeodesy/nvectorBase.py +5 -5
- pygeodesy/osgr.py +24 -24
- pygeodesy/points.py +3 -3
- pygeodesy/resections.py +16 -24
- pygeodesy/rhumb/bases.py +24 -25
- pygeodesy/sphericalNvector.py +6 -6
- pygeodesy/sphericalTrigonometry.py +3 -4
- pygeodesy/triaxials.py +4 -4
- pygeodesy/utmupsBase.py +6 -6
- pygeodesy/vector2d.py +9 -8
- {PyGeodesy-24.4.4.dist-info → PyGeodesy-24.4.18.dist-info}/WHEEL +0 -0
- {PyGeodesy-24.4.4.dist-info → PyGeodesy-24.4.18.dist-info}/top_level.txt +0 -0
pygeodesy/rhumb/bases.py
CHANGED
|
@@ -39,7 +39,6 @@ from pygeodesy.karney import _atan2d, Caps, _CapsBase, _diff182, _fix90, \
|
|
|
39
39
|
_norm180, GDict
|
|
40
40
|
# from pygeodesy.ktm import KTransverseMercator, _AlpCoeffs # _MODS
|
|
41
41
|
from pygeodesy.lazily import _ALL_DOCS, _ALL_MODS as _MODS
|
|
42
|
-
# from pygeodesy.named import notOverloaded # _MODS
|
|
43
42
|
from pygeodesy.namedTuples import Distance2Tuple, LatLon2Tuple
|
|
44
43
|
from pygeodesy.props import deprecated_method, Property, Property_RO, \
|
|
45
44
|
property_RO, _update_all
|
|
@@ -52,7 +51,7 @@ from pygeodesy.vector3d import _intersect3d3, Vector3d # in .Intersection below
|
|
|
52
51
|
from math import cos, fabs
|
|
53
52
|
|
|
54
53
|
__all__ = ()
|
|
55
|
-
__version__ = '24.
|
|
54
|
+
__version__ = '24.04.07'
|
|
56
55
|
|
|
57
56
|
_anti_ = _Dash('anti')
|
|
58
57
|
_rls = [] # instances of C{RbumbLine...} to be updated
|
|
@@ -367,7 +366,7 @@ class RhumbBase(_CapsBase):
|
|
|
367
366
|
|
|
368
367
|
def _Inverse4(self, lon12, r, outmask): # PYCHOK no cover
|
|
369
368
|
'''(INTERNAL) I{Must be overloaded}.'''
|
|
370
|
-
|
|
369
|
+
self._notOverloaded(lon12, r, Caps.toStr(outmask)) # underOK=True
|
|
371
370
|
|
|
372
371
|
def Inverse8(self, lat1, lon1, azi12, s12, outmask=Caps.AZIMUTH_DISTANCE_AREA):
|
|
373
372
|
'''Like method L{Rhumb.Inverse} but returning a L{Rhumb8Tuple} with area C{S12}.
|
|
@@ -417,11 +416,11 @@ class RhumbBase(_CapsBase):
|
|
|
417
416
|
@property_RO
|
|
418
417
|
def _RhumbLine(self): # PYCHOK no cover
|
|
419
418
|
'''(INTERNAL) I{Must be overloaded}.'''
|
|
420
|
-
|
|
419
|
+
self._notOverloaded(underOK=True)
|
|
421
420
|
|
|
422
421
|
def _S12d(self, s1, s2, lon): # PYCHOK no cover
|
|
423
422
|
'''(INTERNAL) I{Must be overloaded}.'''
|
|
424
|
-
|
|
423
|
+
self._notOverloaded(s1, s2, lon) # underOK=True
|
|
425
424
|
|
|
426
425
|
@Property
|
|
427
426
|
def TMorder(self):
|
|
@@ -787,11 +786,11 @@ class RhumbLineBase(_CapsBase):
|
|
|
787
786
|
@property_RO
|
|
788
787
|
def _mu1(self): # PYCHOK no cover
|
|
789
788
|
'''(INTERNAL) I{Must be overloaded}.'''
|
|
790
|
-
|
|
789
|
+
self._notOverloaded(underOK=True)
|
|
791
790
|
|
|
792
791
|
def _mu2lat(self, mu2): # PYCHOK no cover
|
|
793
792
|
'''(INTERNAL) I{Must be overloaded}.'''
|
|
794
|
-
|
|
793
|
+
self._notOverloaded(mu2) # underOK=True
|
|
795
794
|
|
|
796
795
|
@deprecated_method
|
|
797
796
|
def nearestOn4(self, lat0, lon0, **exact_eps_est_tol): # PYCHOK no cover
|
|
@@ -808,27 +807,27 @@ class RhumbLineBase(_CapsBase):
|
|
|
808
807
|
return self.PlumbTo(lat0, lon0, **exact_eps_est_tol)
|
|
809
808
|
|
|
810
809
|
def PlumbTo(self, lat0, lon0, exact=None, eps=EPS, est=None, tol=_TOL):
|
|
811
|
-
'''Compute the I{perpendicular} intersection of this
|
|
812
|
-
from the given point
|
|
813
|
-
<https://SourceForge.net/p/geographiclib/discussion/1026620/thread/2ddc295e/>}.
|
|
814
|
-
|
|
815
|
-
@arg lat0: Latitude of the point (C{degrees}).
|
|
816
|
-
@arg lon0: Longitude of the point (C{degrees}).
|
|
817
|
-
@kwarg exact: If C{None}, use a rhumb line perpendicular to this rhumb
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
810
|
+
'''Compute the I{perpendicular} intersection of this rhumb line with a geodesic
|
|
811
|
+
from the given point (transcoded from I{Karney}'s C++ U{rhumb-intercept
|
|
812
|
+
<https://SourceForge.net/p/geographiclib/discussion/1026620/thread/2ddc295e/>}).
|
|
813
|
+
|
|
814
|
+
@arg lat0: Latitude of the point on the geodesic (C{degrees}).
|
|
815
|
+
@arg lon0: Longitude of the point on the geodesic (C{degrees}).
|
|
816
|
+
@kwarg exact: If C{None}, use a rhumb line perpendicular to this rhumb line,
|
|
817
|
+
otherwise use an I{exact} C{Geodesic...} from the given point
|
|
818
|
+
perpendicular to this rhumb line (C{bool} or C{Geodesic...}),
|
|
819
|
+
see method L{Ellipsoid.geodesic_}.
|
|
821
820
|
@kwarg eps: Optional tolerance for L{pygeodesy.intersection3d3} (C{EPS}),
|
|
822
821
|
used only if C{B{exact} is None}.
|
|
823
|
-
@kwarg est:
|
|
824
|
-
intersection I{along} this rhumb line (C{meter}), used only
|
|
825
|
-
|
|
822
|
+
@kwarg est: Optionally, an initial estimate for the distance C{s12} of the
|
|
823
|
+
intersection I{along} this rhumb line (C{meter}), used only if
|
|
824
|
+
C{B{exact} is not None}.
|
|
826
825
|
@kwarg tol: Longitudinal convergence tolerance (C{degrees}) or distance
|
|
827
826
|
tolerance (C(meter)) when C{B{exact} is None}, respectively
|
|
828
827
|
C{not None}.
|
|
829
828
|
|
|
830
829
|
@return: The intersection point on this rhumb line, a L{GDict} from method
|
|
831
|
-
L{Intersection} if B{C{exact}=None}. If B{
|
|
830
|
+
L{Intersection} if B{C{exact}=None}. If C{B{exact} is not None},
|
|
832
831
|
a L{Position}-like L{GDict} of 13 items C{azi12, a12, s12, lat2,
|
|
833
832
|
lat1, lat0, lon2, lon1, lon0, azi0, a02, s02, at} with distance
|
|
834
833
|
C{a02} in C{degrees} and C{s02} in C{meter} between the given point
|
|
@@ -876,7 +875,7 @@ class RhumbLineBase(_CapsBase):
|
|
|
876
875
|
_d2 = _diff182
|
|
877
876
|
_ErT = E.rocPrimeVertical # aka rocTransverse
|
|
878
877
|
_ovr = _over
|
|
879
|
-
_S12 = Fsum(s12).
|
|
878
|
+
_S12 = Fsum(s12).fsum2f_
|
|
880
879
|
_scd = sincos2d_
|
|
881
880
|
for i in range(1, _TRIPS): # 9+, suffix 1 == C++ 2, 2 == C++ 3
|
|
882
881
|
P = self.Position(s12) # outmask=Cs.LATITUDE_LONGITUDE
|
|
@@ -886,7 +885,7 @@ class RhumbLineBase(_CapsBase):
|
|
|
886
885
|
c2 *= _ErT(r.lat2)
|
|
887
886
|
s *= _ovr(s2 * self._salp, c2) - _ovr(s * r.M21, r.m12)
|
|
888
887
|
s12, t = _S12(c / s) # XXX _ovr?
|
|
889
|
-
if _abs(t) < tol: # or
|
|
888
|
+
if _abs(t) < tol: # or _abs(c) < EPS
|
|
890
889
|
break
|
|
891
890
|
P.set_(azi0=r.azi1, a02=r.a12, s02=r.s12, # azi2=r.azi2,
|
|
892
891
|
lat0=lat0, lon0=lon0, iteration=i, at=r.azi2 - self.azi12,
|
|
@@ -967,7 +966,7 @@ class RhumbLineBase(_CapsBase):
|
|
|
967
966
|
|
|
968
967
|
def _Position4(self, a12, mu2, s12, mu12): # PYCHOK no cover
|
|
969
968
|
'''(INTERNAL) I{Must be overloaded}.'''
|
|
970
|
-
|
|
969
|
+
self._notOverloaded(a12, s12, mu2, mu12) # underOK=True
|
|
971
970
|
|
|
972
971
|
@Property_RO
|
|
973
972
|
def rhumb(self):
|
|
@@ -1085,7 +1084,7 @@ if __name__ == '__main__':
|
|
|
1085
1084
|
r = rh.Inverse8(40.6, -73.8, 35.8, 140.3) # JFK to Tokyo Narita
|
|
1086
1085
|
_ref('# JFK-NRT azi12=%.12f, s12=%.3f S12=%.1f', (r.azi12, r.s12, r.S12), NRT)
|
|
1087
1086
|
|
|
1088
|
-
# % python3 -m
|
|
1087
|
+
# % python3.10 -m pygeodesy3.rhumb.Bases
|
|
1089
1088
|
|
|
1090
1089
|
# Position.lon2 11.61455846901637 vs 11.61455846901637, diff 3.05885e-16
|
|
1091
1090
|
# Position.lon2 7.58982302826842 vs 7.58982302826842, diff 2.34045e-16
|
pygeodesy/sphericalNvector.py
CHANGED
|
@@ -43,12 +43,12 @@ from pygeodesy.fmath import fmean, fsum
|
|
|
43
43
|
from pygeodesy.interns import _composite_, _end_, _Nv00_, _other_, \
|
|
44
44
|
_point_, _pole_
|
|
45
45
|
from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _ALL_OTHER
|
|
46
|
-
# from pygeodesy.named import notImplemented # from .
|
|
46
|
+
# from pygeodesy.named import notImplemented # from .points
|
|
47
47
|
# from pygeodesy.namedTuples import NearestOn3Tuple # from .points
|
|
48
|
-
from pygeodesy.nvectorBase import LatLonNvectorBase, NorthPole, \
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
from pygeodesy.nvectorBase import LatLonNvectorBase, NorthPole, _nsumOf, \
|
|
49
|
+
NvectorBase, _triangulate, _trilaterate
|
|
50
|
+
from pygeodesy.points import NearestOn3Tuple, notImplemented, \
|
|
51
|
+
ispolar # PYCHOK exported
|
|
52
52
|
from pygeodesy.props import deprecated_function, deprecated_method, \
|
|
53
53
|
property_RO
|
|
54
54
|
from pygeodesy.sphericalBase import _m2radians, CartesianSphericalBase, \
|
|
@@ -61,7 +61,7 @@ from pygeodesy.utily import atan2, degrees360, fabs, sincos2, sincos2_, \
|
|
|
61
61
|
# from math import atan2, fabs # from utily
|
|
62
62
|
|
|
63
63
|
__all__ = _ALL_LAZY.sphericalNvector
|
|
64
|
-
__version__ = '
|
|
64
|
+
__version__ = '24.04.07'
|
|
65
65
|
|
|
66
66
|
_lines_ = 'lines'
|
|
67
67
|
|
|
@@ -34,12 +34,11 @@ from pygeodesy.interns import _1_, _2_, _coincident_, _composite_, _colinear_, \
|
|
|
34
34
|
_line_, _near_, _not_, _null_, _parallel_, _point_, \
|
|
35
35
|
_SPACE_, _too_
|
|
36
36
|
from pygeodesy.lazily import _ALL_LAZY, _ALL_MODS as _MODS, _ALL_OTHER
|
|
37
|
-
# from pygeodesy.named import notImplemented # from .points
|
|
38
37
|
# from pygeodesy.nvectorBase import NvectorBase, sumOf # _MODE
|
|
39
38
|
from pygeodesy.namedTuples import LatLon2Tuple, LatLon3Tuple, NearestOn3Tuple, \
|
|
40
39
|
Triangle7Tuple, Triangle8Tuple
|
|
41
40
|
from pygeodesy.points import ispolar, nearestOn5 as _nearestOn5, \
|
|
42
|
-
Fmt as _Fmt
|
|
41
|
+
Fmt as _Fmt # XXX shadowed
|
|
43
42
|
from pygeodesy.props import deprecated_function, deprecated_method
|
|
44
43
|
from pygeodesy.sphericalBase import _m2radians, CartesianSphericalBase, \
|
|
45
44
|
_intersecant2, LatLonSphericalBase, \
|
|
@@ -55,7 +54,7 @@ from pygeodesy.vector3d import sumOf, Vector3d
|
|
|
55
54
|
from math import asin, atan2, cos, degrees, fabs, radians, sin
|
|
56
55
|
|
|
57
56
|
__all__ = _ALL_LAZY.sphericalTrigonometry
|
|
58
|
-
__version__ = '24.
|
|
57
|
+
__version__ = '24.04.07'
|
|
59
58
|
|
|
60
59
|
_PI_EPS4 = PI - EPS4
|
|
61
60
|
if _PI_EPS4 >= PI:
|
|
@@ -567,7 +566,7 @@ class LatLon(LatLonSphericalBase):
|
|
|
567
566
|
# remove kwarg B{C{within}} if present
|
|
568
567
|
w, kwds = _xkwds_pop2(wrap_adjust_limit, within=True)
|
|
569
568
|
if not w:
|
|
570
|
-
|
|
569
|
+
self._notImplemented(within=w)
|
|
571
570
|
|
|
572
571
|
# # UNTESTED - handle C{B{within}=False} and C{B{within}=True}
|
|
573
572
|
# wrap = _xkwds_get(options, wrap=False)
|
pygeodesy/triaxials.py
CHANGED
|
@@ -40,7 +40,7 @@ from pygeodesy.datums import Datum, _spherical_datum, _WGS84, Ellipsoid, _EWGS8
|
|
|
40
40
|
# from pygeodesy.elliptic import Elliptic # _MODS
|
|
41
41
|
# from pygeodesy.errors import _ValueError # from .basics
|
|
42
42
|
from pygeodesy.fmath import Fdot, fdot, fmean_, hypot, hypot_, norm2, sqrt0
|
|
43
|
-
from pygeodesy.fsums import
|
|
43
|
+
from pygeodesy.fsums import _Fsumf_, fsumf_, fsum1f_
|
|
44
44
|
from pygeodesy.interns import NN, _a_, _b_, _beta_, _c_, _distant_, _finite_, \
|
|
45
45
|
_height_, _inside_, _near_, _negative_, _not_, \
|
|
46
46
|
_NOTEQUAL_, _null_, _opposite_, _outside_, _SPACE_, \
|
|
@@ -59,7 +59,7 @@ from pygeodesy.vector3d import _otherV3d, Vector3d, _ALL_LAZY, _MODS
|
|
|
59
59
|
from math import atan2, fabs, sqrt
|
|
60
60
|
|
|
61
61
|
__all__ = _ALL_LAZY.triaxials
|
|
62
|
-
__version__ = '24.
|
|
62
|
+
__version__ = '24.04.14'
|
|
63
63
|
|
|
64
64
|
_not_ordered_ = _not_('ordered')
|
|
65
65
|
_omega_ = 'omega'
|
|
@@ -805,8 +805,8 @@ class Triaxial(Triaxial_):
|
|
|
805
805
|
c2_a2 = -self._1e2ac # == -(c/a)**2
|
|
806
806
|
a2c2_a2 = self. e2ac # (a**2 - c**2) / a**2 == 1 - (c/a)**2
|
|
807
807
|
|
|
808
|
-
x2 =
|
|
809
|
-
z2 =
|
|
808
|
+
x2 = _Fsumf_(_1_0, -b2_a2 * sa**2, c2_a2 * ca**2).fover(a2c2_a2)
|
|
809
|
+
z2 = _Fsumf_(c2_a2, sb**2, b2_a2 * cb**2).fover(a2c2_a2)
|
|
810
810
|
|
|
811
811
|
x, y, z = self._abc3
|
|
812
812
|
x *= cb * sqrt0(x2, Error=TriaxialError)
|
pygeodesy/utmupsBase.py
CHANGED
|
@@ -17,7 +17,7 @@ from pygeodesy.interns import NN, _A_, _B_, _COMMA_, _Error_, \
|
|
|
17
17
|
_gamma_, _n_a_, _not_, _N_, _NS_, _PLUS_, \
|
|
18
18
|
_scale_, _SPACE_, _Y_, _Z_, _under
|
|
19
19
|
from pygeodesy.lazily import _ALL_DOCS, _ALL_LAZY, _ALL_MODS as _MODS
|
|
20
|
-
from pygeodesy.named import _NamedBase, nameof,
|
|
20
|
+
from pygeodesy.named import _NamedBase, nameof, _xnamed
|
|
21
21
|
from pygeodesy.namedTuples import EasNor2Tuple, LatLonDatum5Tuple
|
|
22
22
|
from pygeodesy.props import deprecated_method, property_doc_, _update_all, \
|
|
23
23
|
deprecated_property_RO, Property_RO, property_RO
|
|
@@ -26,7 +26,7 @@ from pygeodesy.units import Band, Easting, Northing, Scalar, Zone
|
|
|
26
26
|
from pygeodesy.utily import _Wrap, wrap360
|
|
27
27
|
|
|
28
28
|
__all__ = _ALL_LAZY.utmupsBase
|
|
29
|
-
__version__ = '
|
|
29
|
+
__version__ = '24.04.07'
|
|
30
30
|
|
|
31
31
|
_UPS_BANDS = _A_, _B_, _Y_, _Z_ # UPS polar bands SE, SW, NE, NW
|
|
32
32
|
# _UTM_BANDS = _MODS.utm._Bands
|
|
@@ -170,7 +170,7 @@ class UtmUpsBase(_NamedBase):
|
|
|
170
170
|
'''
|
|
171
171
|
E = self._Error
|
|
172
172
|
if not E: # PYCHOK no cover
|
|
173
|
-
|
|
173
|
+
self._notOverloaded(callername=_under(_Error_))
|
|
174
174
|
|
|
175
175
|
self._easting = Easting(easting, Error=E)
|
|
176
176
|
self._northing = Northing(northing, Error=E)
|
|
@@ -203,7 +203,7 @@ class UtmUpsBase(_NamedBase):
|
|
|
203
203
|
if band:
|
|
204
204
|
_xinstanceof(str, band=band)
|
|
205
205
|
# if not self._Bands: # PYCHOK no cover
|
|
206
|
-
#
|
|
206
|
+
# self._notOverloaded(callername=_under('Bands'))
|
|
207
207
|
if band not in self._Bands:
|
|
208
208
|
t = _or(*sorted(set(map(repr, self._Bands))))
|
|
209
209
|
raise self._Error(band=band, txt=_not_(t))
|
|
@@ -276,7 +276,7 @@ class UtmUpsBase(_NamedBase):
|
|
|
276
276
|
@Property_RO
|
|
277
277
|
def falsed2(self): # PYCHOK no cover
|
|
278
278
|
'''I{Must be overloaded}.'''
|
|
279
|
-
|
|
279
|
+
self._notOverloaded(self)
|
|
280
280
|
|
|
281
281
|
@Property_RO
|
|
282
282
|
def gamma(self):
|
|
@@ -374,7 +374,7 @@ class UtmUpsBase(_NamedBase):
|
|
|
374
374
|
|
|
375
375
|
def _toLLEB(self, **kwds): # PYCHOK no cover
|
|
376
376
|
'''(INTERNAL) I{Must be overloaded}.'''
|
|
377
|
-
|
|
377
|
+
self._notOverloaded(**kwds)
|
|
378
378
|
|
|
379
379
|
def toMgrs(self, center=False):
|
|
380
380
|
'''Convert this UTM/UPS coordinate to an MGRS grid reference.
|
pygeodesy/vector2d.py
CHANGED
|
@@ -12,7 +12,7 @@ from pygeodesy.constants import EPS, EPS0, EPS02, EPS4, INF, INT0, \
|
|
|
12
12
|
from pygeodesy.errors import _and, _AssertionError, IntersectionError, NumPyError, \
|
|
13
13
|
PointsError, TriangleError, _xError, _xkwds
|
|
14
14
|
from pygeodesy.fmath import fabs, fdot, hypot, hypot2_, sqrt
|
|
15
|
-
from pygeodesy.fsums import
|
|
15
|
+
from pygeodesy.fsums import _Fsumf_, fsumf_, fsum1f_
|
|
16
16
|
from pygeodesy.interns import NN, _a_, _and_, _b_, _c_, _center_, _coincident_, \
|
|
17
17
|
_colinear_, _COMMASPACE_, _concentric_, _few_, \
|
|
18
18
|
_intersection_, _invalid_, _near_, _no_, _of_, \
|
|
@@ -30,7 +30,7 @@ from contextlib import contextmanager
|
|
|
30
30
|
# from math import fabs, sqrt # from .fmath
|
|
31
31
|
|
|
32
32
|
__all__ = _ALL_LAZY.vector2d
|
|
33
|
-
__version__ = '
|
|
33
|
+
__version__ = '24.04.18'
|
|
34
34
|
|
|
35
35
|
_cA_ = 'cA'
|
|
36
36
|
_cB_ = 'cB'
|
|
@@ -354,10 +354,11 @@ def _meeus4(A, point2, point3, circum=False, useZ=True, clas=None, **clas_kwds):
|
|
|
354
354
|
a, c, A, C = c, a, C, A
|
|
355
355
|
|
|
356
356
|
if a > EPS02 and (circum or a < (b + c)): # circumradius
|
|
357
|
-
b =
|
|
358
|
-
c =
|
|
359
|
-
R =
|
|
360
|
-
|
|
357
|
+
b = sqrt(b / a)
|
|
358
|
+
c = sqrt(c / a)
|
|
359
|
+
R = _Fsumf_(_1_0, b, c) * _Fsumf_(_1_0, b, -c) * \
|
|
360
|
+
_Fsumf_(_1_0, -b, c) * _Fsumf_(_N_1_0, b, c)
|
|
361
|
+
r = R.fover(a)
|
|
361
362
|
if r < EPS02:
|
|
362
363
|
raise IntersectionError(_coincident_ if b < EPS0 or c < EPS0 else (
|
|
363
364
|
_colinear_ if _iscolinearWith(A, B, C) else _invalid_))
|
|
@@ -503,8 +504,8 @@ def _radii11ABC(point1, point2, point3, useZ=True):
|
|
|
503
504
|
b = C.minus(A).length
|
|
504
505
|
c = A.minus(B).length
|
|
505
506
|
|
|
506
|
-
S =
|
|
507
|
-
s =
|
|
507
|
+
S = _Fsumf_(a, b, c) * _0_5
|
|
508
|
+
s = float(S) # semi-perimeter
|
|
508
509
|
if s > EPS0:
|
|
509
510
|
rs = float(S - a), float(S - b), float(S - c)
|
|
510
511
|
r3, r2, r1 = sorted(rs) # r3 <= r2 <= r1
|
|
File without changes
|
|
File without changes
|