< Summary

Line coverage
100%
Covered lines: 1169
Uncovered lines: 0
Coverable lines: 1169
Total lines: 1677
Line coverage: 100%
Branch coverage
100%
Covered branches: 110
Total branches: 110
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
File 1: TryGetPoint(...)100%22100%
File 1: TryGetRelativeOffset(...)100%2222100%
File 1: TryScaleOffset(...)100%44100%
File 1: TryGetLocalPointIn(...)100%44100%
File 1: TryGetProjectedOffset(...)100%11100%
File 1: ProjectNonNegativeOffset(...)100%11100%
File 1: GetProjectedOffsetRatio(...)100%11100%
File 1: TryGetPointCoordinate(...)100%11100%
File 1: TryGetRelativeOffsetCoordinate(...)100%22100%
File 1: GetRelativeOffsetNumerator(...)100%11100%
File 1: TryGetLocalPointCoordinate(...)100%11100%
File 2: GetDirection(...)100%11100%
File 2: CompareSquaredDistances(...)100%1212100%
File 2: CompareExactSquaredDistances(...)100%11100%
File 2: GetExactSquaredOffsetRatio(...)100%11100%
File 2: GetSquaredOffsetRatio(...)100%11100%
File 3: TryGetPointInFrame(...)100%1616100%
File 3: CompareProjectedOffsets(...)100%11100%
File 3: CompareProjectedOffsets(...)100%44100%
File 3: TryGetPoint(...)100%66100%
File 3: TryGetRelativeOffset(...)100%1010100%
File 3: RepresentsSamePoint(...)100%44100%
File 3: TryGetLocalPointIn(...)100%66100%
File 3: TryGetProjectedOffset(...)100%88100%
File 3: ProjectNonNegativeOffset(...)100%88100%
File 3: GetExactProjectedOffsetRatio(...)100%11100%
File 3: GetExactRelativeOffsetRatio(...)100%11100%
File 3: GetExactRelativeOffsetNumerator(...)100%11100%
File 3: GetAnchorCoordinateNumerator(...)100%11100%
File 3: GetAnchorDenominator(...)100%11100%
File 3: GetAnchorDeltaNumerator(...)100%11100%
File 3: GetWideProjection(...)100%11100%
File 3: TryGetScaledExactCoordinate(...)100%22100%

File(s)

/home/runner/work/FixedMathSharp/FixedMathSharp/src/FixedMathSharp/Geometry/Anchors/Wide/WidePointAnchor3d.cs

#LineLine coverage
 1//=======================================================================
 2// WidePointAnchor3d.cs
 3//=======================================================================
 4// MIT License, Copyright (c) 2024-present David Oravsky (mrdav30)
 5// See LICENSE file in the project root for full license information.
 6//=======================================================================
 7
 8namespace FixedMathSharp.Geometry;
 9
 10/// <summary>
 11/// Provides high-precision (wide/extended) arithmetic helpers for resolving anchored 3D points
 12/// and their relative offsets under rotation, avoiding precision loss from repeated fixed-point operations.
 13/// </summary>
 14/// <content>Owns rigid-frame point materialization and exact relative geometry.</content>
 15internal static partial class WidePointAnchor3d
 16{
 17    internal static bool TryGetPoint(
 18        Vector3d origin,
 19        FixedQuaternion rotation,
 20        Vector3d localPoint,
 21        Vector3d localDisplacement,
 22        out Vector3d point)
 23    {
 503324        WideRationalBasis3d basis = new(rotation);
 503325        Signed576 denominator =
 503326            Signed576.ExtendValue(
 503327                Signed320.ExtendValue(basis.Denominator));
 503328        bool representable = TryGetPointCoordinate(
 503329            origin.X,
 503330            basis.Xx,
 503331            basis.Yx,
 503332            basis.Zx,
 503333            basis.Denominator,
 503334            denominator,
 503335            localPoint,
 503336            localDisplacement,
 503337            out Fixed64 x)
 503338            & TryGetPointCoordinate(
 503339                origin.Y,
 503340                basis.Xy,
 503341                basis.Yy,
 503342                basis.Zy,
 503343                basis.Denominator,
 503344                denominator,
 503345                localPoint,
 503346                localDisplacement,
 503347                out Fixed64 y)
 503348            & TryGetPointCoordinate(
 503349                origin.Z,
 503350                basis.Xz,
 503351                basis.Yz,
 503352                basis.Zz,
 503353                basis.Denominator,
 503354                denominator,
 503355                localPoint,
 503356                localDisplacement,
 503357                out Fixed64 z);
 503358        if (!representable)
 59        {
 12960            point = default;
 12961            return false;
 62        }
 63
 490464        point = new Vector3d(x, y, z);
 490465        return true;
 66    }
 67
 68    internal static bool TryGetRelativeOffset(
 69        Vector3d firstOrigin,
 70        FixedQuaternion firstRotation,
 71        Vector3d firstLocalPoint,
 72        Vector3d firstLocalDisplacement,
 73        Vector3d secondOrigin,
 74        FixedQuaternion secondRotation,
 75        Vector3d secondLocalPoint,
 76        Vector3d secondLocalDisplacement,
 77        Fixed64 scale,
 78        out Vector3d offset)
 79    {
 599880        if (firstOrigin == secondOrigin
 599881            && firstRotation == secondRotation)
 82        {
 83            bool localRepresentable;
 84            Vector3d localOffset;
 123485            if (firstLocalDisplacement == Vector3d.Zero
 123486                && secondLocalDisplacement == Vector3d.Zero)
 87            {
 116488                localRepresentable = Vector3d.TrySubtract(
 116489                    firstLocalPoint,
 116490                    secondLocalPoint,
 116491                    out localOffset);
 92            }
 93            else
 94            {
 7095                localRepresentable = Vector3d.TrySubtractSums(
 7096                    firstLocalPoint,
 7097                    firstLocalDisplacement,
 7098                    secondLocalPoint,
 7099                    secondLocalDisplacement,
 70100                    out localOffset);
 101            }
 102
 1234103            if (localRepresentable)
 104            {
 1230105                if (firstRotation != FixedQuaternion.Identity)
 106                {
 71107                    if (scale == Fixed64.One)
 70108                        return firstRotation.TryRotate(localOffset, out offset);
 109                }
 110                else
 111                {
 1159112                    return TryScaleOffset(localOffset, scale, out offset);
 113                }
 114            }
 115        }
 116
 4769117        if (firstRotation == FixedQuaternion.Identity
 4769118            && secondRotation == FixedQuaternion.Identity)
 119        {
 4297120            bool compactRepresentable = Vector3d.TryAddSubtract(
 4297121                firstOrigin,
 4297122                firstLocalPoint,
 4297123                secondOrigin,
 4297124                out Vector3d firstStep);
 4297125            compactRepresentable &= Vector3d.TryAddSubtract(
 4297126                firstStep,
 4297127                firstLocalDisplacement,
 4297128                secondLocalPoint,
 4297129                out Vector3d secondStep);
 4297130            compactRepresentable &= Vector3d.TrySubtract(
 4297131                secondStep,
 4297132                secondLocalDisplacement,
 4297133                out Vector3d compactOffset);
 4297134            if (compactRepresentable)
 4254135                return TryScaleOffset(compactOffset, scale, out offset);
 136        }
 137
 515138        WideRationalBasis3d firstBasis = new(firstRotation);
 515139        WideRationalBasis3d secondBasis = new(secondRotation);
 515140        Signed320 denominator = WideArithmetic.MultiplySigned192(
 515141            firstBasis.Denominator,
 515142            secondBasis.Denominator);
 515143        Signed576 denominatorWide = Signed576.ExtendValue(denominator);
 515144        bool representable = TryGetRelativeOffsetCoordinate(
 515145            firstOrigin.X,
 515146            firstBasis.Xx,
 515147            firstBasis.Yx,
 515148            firstBasis.Zx,
 515149            firstBasis.Denominator,
 515150            firstLocalPoint,
 515151            firstLocalDisplacement,
 515152            secondOrigin.X,
 515153            secondBasis.Xx,
 515154            secondBasis.Yx,
 515155            secondBasis.Zx,
 515156            secondBasis.Denominator,
 515157            secondLocalPoint,
 515158            secondLocalDisplacement,
 515159            denominator,
 515160            denominatorWide,
 515161            scale,
 515162            out Fixed64 x)
 515163            & TryGetRelativeOffsetCoordinate(
 515164                firstOrigin.Y,
 515165                firstBasis.Xy,
 515166                firstBasis.Yy,
 515167                firstBasis.Zy,
 515168                firstBasis.Denominator,
 515169                firstLocalPoint,
 515170                firstLocalDisplacement,
 515171                secondOrigin.Y,
 515172                secondBasis.Xy,
 515173                secondBasis.Yy,
 515174                secondBasis.Zy,
 515175            secondBasis.Denominator,
 515176            secondLocalPoint,
 515177            secondLocalDisplacement,
 515178            denominator,
 515179            denominatorWide,
 515180            scale,
 515181            out Fixed64 y)
 515182            & TryGetRelativeOffsetCoordinate(
 515183                firstOrigin.Z,
 515184                firstBasis.Xz,
 515185                firstBasis.Yz,
 515186                firstBasis.Zz,
 515187                firstBasis.Denominator,
 515188                firstLocalPoint,
 515189                firstLocalDisplacement,
 515190                secondOrigin.Z,
 515191                secondBasis.Xz,
 515192                secondBasis.Yz,
 515193                secondBasis.Zz,
 515194            secondBasis.Denominator,
 515195            secondLocalPoint,
 515196            secondLocalDisplacement,
 515197            denominator,
 515198            denominatorWide,
 515199            scale,
 515200            out Fixed64 z);
 515201        if (!representable)
 202        {
 36203            offset = default;
 36204            return false;
 205        }
 206
 479207        offset = new Vector3d(x, y, z);
 479208        return true;
 209    }
 210
 211    private static bool TryScaleOffset(
 212        Vector3d value,
 213        Fixed64 scale,
 214        out Vector3d result)
 215    {
 5413216        if (scale == Fixed64.One)
 217        {
 5407218            result = value;
 5407219            return true;
 220        }
 221
 6222        bool representable = Fixed64.TryMultiplyDivide(
 6223                value.X,
 6224                scale,
 6225                Fixed64.One,
 6226                out Fixed64 x)
 6227            & Fixed64.TryMultiplyDivide(
 6228                value.Y,
 6229                scale,
 6230                Fixed64.One,
 6231                out Fixed64 y)
 6232            & Fixed64.TryMultiplyDivide(
 6233                value.Z,
 6234                scale,
 6235                Fixed64.One,
 6236                out Fixed64 z);
 6237        result = representable ? new Vector3d(x, y, z) : default;
 6238        return representable;
 239    }
 240
 241    internal static bool TryGetLocalPointIn(
 242        Vector3d pointOrigin,
 243        FixedQuaternion pointRotation,
 244        Vector3d pointLocalPoint,
 245        Vector3d pointLocalDisplacement,
 246        Vector3d frameOrigin,
 247        FixedQuaternion frameRotation,
 248        out Vector3d localPoint)
 249    {
 4798250        if (frameRotation == FixedQuaternion.Identity)
 4216251            return TryGetRelativeOffset(pointOrigin, pointRotation, pointLocalPoint, pointLocalDisplacement,
 4216252                frameOrigin, FixedQuaternion.Identity, Vector3d.Zero, Vector3d.Zero, Fixed64.One, out localPoint);
 253
 582254        WideRationalBasis3d pointBasis = new(pointRotation);
 582255        WideRationalBasis3d frameBasis = new(frameRotation);
 582256        Signed320 denominator = WideArithmetic.MultiplySigned192(
 582257            pointBasis.Denominator,
 582258            frameBasis.Denominator);
 582259        Signed576 denominatorWide = Signed576.ExtendValue(denominator);
 582260        Signed192 originX = WideArithmetic.SubtractSigned192(
 582261            Signed192.Raw(pointOrigin.X),
 582262            Signed192.Raw(frameOrigin.X));
 582263        Signed192 originY = WideArithmetic.SubtractSigned192(
 582264            Signed192.Raw(pointOrigin.Y),
 582265            Signed192.Raw(frameOrigin.Y));
 582266        Signed192 originZ = WideArithmetic.SubtractSigned192(
 582267            Signed192.Raw(pointOrigin.Z),
 582268            Signed192.Raw(frameOrigin.Z));
 582269        Signed320 rotatedX = WideArithmetic.GetDotProduct3D(
 582270            Signed192.Raw(pointLocalPoint.X),
 582271            Signed192.Raw(pointLocalPoint.Y),
 582272            Signed192.Raw(pointLocalPoint.Z),
 582273            pointBasis.Xx,
 582274            pointBasis.Yx,
 582275            pointBasis.Zx);
 582276        rotatedX = WideArithmetic.AddSigned320(
 582277            rotatedX,
 582278            WideArithmetic.GetDotProduct3D(
 582279                Signed192.Raw(pointLocalDisplacement.X),
 582280                Signed192.Raw(pointLocalDisplacement.Y),
 582281                Signed192.Raw(pointLocalDisplacement.Z),
 582282                pointBasis.Xx,
 582283                pointBasis.Yx,
 582284                pointBasis.Zx));
 582285        Signed320 rotatedY = WideArithmetic.GetDotProduct3D(
 582286            Signed192.Raw(pointLocalPoint.X),
 582287            Signed192.Raw(pointLocalPoint.Y),
 582288            Signed192.Raw(pointLocalPoint.Z),
 582289            pointBasis.Xy,
 582290            pointBasis.Yy,
 582291            pointBasis.Zy);
 582292        rotatedY = WideArithmetic.AddSigned320(
 582293            rotatedY,
 582294            WideArithmetic.GetDotProduct3D(
 582295                Signed192.Raw(pointLocalDisplacement.X),
 582296                Signed192.Raw(pointLocalDisplacement.Y),
 582297                Signed192.Raw(pointLocalDisplacement.Z),
 582298                pointBasis.Xy,
 582299                pointBasis.Yy,
 582300                pointBasis.Zy));
 582301        Signed320 rotatedZ = WideArithmetic.GetDotProduct3D(
 582302            Signed192.Raw(pointLocalPoint.X),
 582303            Signed192.Raw(pointLocalPoint.Y),
 582304            Signed192.Raw(pointLocalPoint.Z),
 582305            pointBasis.Xz,
 582306            pointBasis.Yz,
 582307            pointBasis.Zz);
 582308        rotatedZ = WideArithmetic.AddSigned320(
 582309            rotatedZ,
 582310            WideArithmetic.GetDotProduct3D(
 582311                Signed192.Raw(pointLocalDisplacement.X),
 582312                Signed192.Raw(pointLocalDisplacement.Y),
 582313                Signed192.Raw(pointLocalDisplacement.Z),
 582314                pointBasis.Xz,
 582315                pointBasis.Yz,
 582316                pointBasis.Zz));
 317
 582318        bool representable = TryGetLocalPointCoordinate(
 582319            originX,
 582320            originY,
 582321            originZ,
 582322            rotatedX,
 582323            rotatedY,
 582324            rotatedZ,
 582325            pointBasis.Denominator,
 582326            frameBasis.Xx,
 582327            frameBasis.Xy,
 582328            frameBasis.Xz,
 582329            denominatorWide,
 582330            out Fixed64 x)
 582331            & TryGetLocalPointCoordinate(
 582332                originX,
 582333                originY,
 582334                originZ,
 582335                rotatedX,
 582336                rotatedY,
 582337                rotatedZ,
 582338                pointBasis.Denominator,
 582339                frameBasis.Yx,
 582340                frameBasis.Yy,
 582341                frameBasis.Yz,
 582342                denominatorWide,
 582343                out Fixed64 y)
 582344            & TryGetLocalPointCoordinate(
 582345                originX,
 582346                originY,
 582347                originZ,
 582348                rotatedX,
 582349                rotatedY,
 582350                rotatedZ,
 582351                pointBasis.Denominator,
 582352                frameBasis.Zx,
 582353                frameBasis.Zy,
 582354                frameBasis.Zz,
 582355                denominatorWide,
 582356                out Fixed64 z);
 582357        if (!representable)
 358        {
 3359            localPoint = default;
 3360            return false;
 361        }
 362
 579363        localPoint = new Vector3d(x, y, z);
 579364        return true;
 365    }
 366
 367    internal static bool TryGetProjectedOffset(
 368        Vector3d firstOrigin,
 369        FixedQuaternion firstRotation,
 370        Vector3d firstLocalPoint,
 371        Vector3d firstLocalDisplacement,
 372        Vector3d secondOrigin,
 373        FixedQuaternion secondRotation,
 374        Vector3d secondLocalPoint,
 375        Vector3d secondLocalDisplacement,
 376        Vector3d direction,
 377        out Fixed64 projection)
 378    {
 262379        GetProjectedOffsetRatio(
 262380            firstOrigin,
 262381            firstRotation,
 262382            firstLocalPoint,
 262383            firstLocalDisplacement,
 262384            secondOrigin,
 262385            secondRotation,
 262386            secondLocalPoint,
 262387            secondLocalDisplacement,
 262388            direction,
 262389            out Signed704 numerator,
 262390            out Signed704 denominator);
 262391        return Fixed64.TryGetSignedRawRatio(
 262392            numerator,
 262393            denominator,
 262394            out projection);
 395    }
 396
 397    internal static Fixed64 ProjectNonNegativeOffset(
 398        Vector3d firstOrigin,
 399        FixedQuaternion firstRotation,
 400        Vector3d firstLocalPoint,
 401        Vector3d firstLocalDisplacement,
 402        Vector3d secondOrigin,
 403        FixedQuaternion secondRotation,
 404        Vector3d secondLocalPoint,
 405        Vector3d secondLocalDisplacement,
 406        Vector3d direction)
 407    {
 286408        GetProjectedOffsetRatio(
 286409            firstOrigin,
 286410            firstRotation,
 286411            firstLocalPoint,
 286412            firstLocalDisplacement,
 286413            secondOrigin,
 286414            secondRotation,
 286415            secondLocalPoint,
 286416            secondLocalDisplacement,
 286417            direction,
 286418            out Signed704 numerator,
 286419            out Signed704 denominator);
 286420        return Fixed64.GetNonNegativeRawRatioFloor(
 286421            numerator,
 286422            denominator);
 423    }
 424
 425    private static void GetProjectedOffsetRatio(
 426        Vector3d firstOrigin,
 427        FixedQuaternion firstRotation,
 428        Vector3d firstLocalPoint,
 429        Vector3d firstLocalDisplacement,
 430        Vector3d secondOrigin,
 431        FixedQuaternion secondRotation,
 432        Vector3d secondLocalPoint,
 433        Vector3d secondLocalDisplacement,
 434        Vector3d direction,
 435        out Signed704 numerator,
 436        out Signed704 denominator)
 437    {
 548438        WideRationalBasis3d firstBasis = new(firstRotation);
 548439        WideRationalBasis3d secondBasis = new(secondRotation);
 548440        Signed320 coordinateDenominator =
 548441            WideArithmetic.MultiplySigned192(
 548442                firstBasis.Denominator,
 548443                secondBasis.Denominator);
 548444        Signed576 coordinateDenominatorWide =
 548445            Signed576.ExtendValue(coordinateDenominator);
 548446        Signed576 x = GetRelativeOffsetNumerator(
 548447            firstOrigin.X,
 548448            firstBasis.Xx,
 548449            firstBasis.Yx,
 548450            firstBasis.Zx,
 548451            firstBasis.Denominator,
 548452            firstLocalPoint,
 548453            firstLocalDisplacement,
 548454            secondOrigin.X,
 548455            secondBasis.Xx,
 548456            secondBasis.Yx,
 548457            secondBasis.Zx,
 548458            secondBasis.Denominator,
 548459            secondLocalPoint,
 548460            secondLocalDisplacement,
 548461            coordinateDenominator);
 548462        Signed576 y = GetRelativeOffsetNumerator(
 548463            firstOrigin.Y,
 548464            firstBasis.Xy,
 548465            firstBasis.Yy,
 548466            firstBasis.Zy,
 548467            firstBasis.Denominator,
 548468            firstLocalPoint,
 548469            firstLocalDisplacement,
 548470            secondOrigin.Y,
 548471            secondBasis.Xy,
 548472            secondBasis.Yy,
 548473            secondBasis.Zy,
 548474            secondBasis.Denominator,
 548475            secondLocalPoint,
 548476            secondLocalDisplacement,
 548477            coordinateDenominator);
 548478        Signed576 z = GetRelativeOffsetNumerator(
 548479            firstOrigin.Z,
 548480            firstBasis.Xz,
 548481            firstBasis.Yz,
 548482            firstBasis.Zz,
 548483            firstBasis.Denominator,
 548484            firstLocalPoint,
 548485            firstLocalDisplacement,
 548486            secondOrigin.Z,
 548487            secondBasis.Xz,
 548488            secondBasis.Yz,
 548489            secondBasis.Zz,
 548490            secondBasis.Denominator,
 548491            secondLocalPoint,
 548492            secondLocalDisplacement,
 548493            coordinateDenominator);
 548494        numerator = WideArithmetic.AddSigned704(
 548495            WideArithmetic.AddSigned704(
 548496                WideArithmetic.MultiplySigned576ToSigned704(
 548497                    x,
 548498                    Signed320.ExtendValue(Signed192.Raw(direction.X))),
 548499                WideArithmetic.MultiplySigned576ToSigned704(
 548500                    y,
 548501                    Signed320.ExtendValue(Signed192.Raw(direction.Y)))),
 548502            WideArithmetic.MultiplySigned576ToSigned704(
 548503                z,
 548504                Signed320.ExtendValue(Signed192.Raw(direction.Z))));
 548505        denominator = WideArithmetic.MultiplySigned576ToSigned704(
 548506            coordinateDenominatorWide,
 548507            Signed320.ExtendValue(Signed192.One));
 548508    }
 509
 510    private static bool TryGetPointCoordinate(
 511        Fixed64 origin,
 512        Signed192 axisX,
 513        Signed192 axisY,
 514        Signed192 axisZ,
 515        Signed192 denominator,
 516        Signed576 denominatorWide,
 517        Vector3d localPoint,
 518        Vector3d localDisplacement,
 519        out Fixed64 coordinate)
 520    {
 15099521        Signed320 numerator = WideArithmetic.AddSigned320(
 15099522            WideArithmetic.MultiplySigned192(Signed192.Raw(origin), denominator),
 15099523            WideArithmetic.AddSigned320(
 15099524                WideArithmetic.GetDotProduct3D(
 15099525                    Signed192.Raw(localPoint.X),
 15099526                    Signed192.Raw(localPoint.Y),
 15099527                    Signed192.Raw(localPoint.Z),
 15099528                    axisX,
 15099529                    axisY,
 15099530                    axisZ),
 15099531                WideArithmetic.GetDotProduct3D(
 15099532                    Signed192.Raw(localDisplacement.X),
 15099533                    Signed192.Raw(localDisplacement.Y),
 15099534                    Signed192.Raw(localDisplacement.Z),
 15099535                    axisX,
 15099536                    axisY,
 15099537                    axisZ)));
 15099538        return Fixed64.TryGetSignedRawRatio(
 15099539            Signed576.ExtendValue(numerator),
 15099540            denominatorWide,
 15099541            out coordinate);
 542    }
 543
 544    private static bool TryGetRelativeOffsetCoordinate(
 545        Fixed64 firstOrigin,
 546        Signed192 firstAxisX,
 547        Signed192 firstAxisY,
 548        Signed192 firstAxisZ,
 549        Signed192 firstDenominator,
 550        Vector3d firstLocalPoint,
 551        Vector3d firstLocalDisplacement,
 552        Fixed64 secondOrigin,
 553        Signed192 secondAxisX,
 554        Signed192 secondAxisY,
 555        Signed192 secondAxisZ,
 556        Signed192 secondDenominator,
 557        Vector3d secondLocalPoint,
 558        Vector3d secondLocalDisplacement,
 559        Signed320 denominator,
 560        Signed576 denominatorWide,
 561        Fixed64 scale,
 562        out Fixed64 coordinate)
 563    {
 1545564        Signed576 numerator = GetRelativeOffsetNumerator(
 1545565            firstOrigin,
 1545566            firstAxisX,
 1545567            firstAxisY,
 1545568            firstAxisZ,
 1545569            firstDenominator,
 1545570            firstLocalPoint,
 1545571            firstLocalDisplacement,
 1545572            secondOrigin,
 1545573            secondAxisX,
 1545574            secondAxisY,
 1545575            secondAxisZ,
 1545576            secondDenominator,
 1545577            secondLocalPoint,
 1545578            secondLocalDisplacement,
 1545579            denominator);
 1545580        if (scale == Fixed64.One)
 581        {
 762582            return Fixed64.TryGetSignedRawRatio(
 762583                numerator,
 762584                denominatorWide,
 762585                out coordinate);
 586        }
 783587        Signed320 scaleRaw = Signed320.ExtendValue(Signed192.Raw(scale));
 783588        Signed320 oneRaw = Signed320.ExtendValue(Signed192.One);
 783589        return Fixed64.TryGetSignedRawRatio(
 783590            WideArithmetic.MultiplySigned576ToSigned704(
 783591                numerator,
 783592                scaleRaw),
 783593            WideArithmetic.MultiplySigned576ToSigned704(
 783594                denominatorWide,
 783595                oneRaw),
 783596            out coordinate);
 597    }
 598
 599    private static Signed576 GetRelativeOffsetNumerator(
 600        Fixed64 firstOrigin,
 601        Signed192 firstAxisX,
 602        Signed192 firstAxisY,
 603        Signed192 firstAxisZ,
 604        Signed192 firstDenominator,
 605        Vector3d firstLocalPoint,
 606        Vector3d firstLocalDisplacement,
 607        Fixed64 secondOrigin,
 608        Signed192 secondAxisX,
 609        Signed192 secondAxisY,
 610        Signed192 secondAxisZ,
 611        Signed192 secondDenominator,
 612        Vector3d secondLocalPoint,
 613        Vector3d secondLocalDisplacement,
 614        Signed320 denominator)
 615    {
 3363616        Signed320 firstRotated = WideArithmetic.GetDotProduct3D(
 3363617            Signed192.Raw(firstLocalPoint.X),
 3363618            Signed192.Raw(firstLocalPoint.Y),
 3363619            Signed192.Raw(firstLocalPoint.Z),
 3363620            firstAxisX,
 3363621            firstAxisY,
 3363622            firstAxisZ);
 3363623        firstRotated = WideArithmetic.AddSigned320(
 3363624            firstRotated,
 3363625            WideArithmetic.GetDotProduct3D(
 3363626                Signed192.Raw(firstLocalDisplacement.X),
 3363627                Signed192.Raw(firstLocalDisplacement.Y),
 3363628                Signed192.Raw(firstLocalDisplacement.Z),
 3363629                firstAxisX,
 3363630                firstAxisY,
 3363631                firstAxisZ));
 3363632        Signed320 secondRotated = WideArithmetic.GetDotProduct3D(
 3363633            Signed192.Raw(secondLocalPoint.X),
 3363634            Signed192.Raw(secondLocalPoint.Y),
 3363635            Signed192.Raw(secondLocalPoint.Z),
 3363636            secondAxisX,
 3363637            secondAxisY,
 3363638            secondAxisZ);
 3363639        secondRotated = WideArithmetic.AddSigned320(
 3363640            secondRotated,
 3363641            WideArithmetic.GetDotProduct3D(
 3363642                Signed192.Raw(secondLocalDisplacement.X),
 3363643                Signed192.Raw(secondLocalDisplacement.Y),
 3363644                Signed192.Raw(secondLocalDisplacement.Z),
 3363645                secondAxisX,
 3363646                secondAxisY,
 3363647                secondAxisZ));
 3363648        return WideArithmetic.SubtractSigned576(
 3363649            WideArithmetic.AddSigned576(
 3363650                WideArithmetic.MultiplySigned320(
 3363651                    Signed320.ExtendValue(
 3363652                        WideArithmetic.SubtractSigned192(
 3363653                            Signed192.Raw(firstOrigin),
 3363654                            Signed192.Raw(secondOrigin))),
 3363655                    denominator),
 3363656                WideArithmetic.MultiplySigned320(
 3363657                    firstRotated,
 3363658                    Signed320.ExtendValue(secondDenominator))),
 3363659            WideArithmetic.MultiplySigned320(
 3363660                secondRotated,
 3363661                Signed320.ExtendValue(firstDenominator)));
 662    }
 663
 664    private static bool TryGetLocalPointCoordinate(
 665        Signed192 originX,
 666        Signed192 originY,
 667        Signed192 originZ,
 668        Signed320 rotatedX,
 669        Signed320 rotatedY,
 670        Signed320 rotatedZ,
 671        Signed192 pointDenominator,
 672        Signed192 frameAxisX,
 673        Signed192 frameAxisY,
 674        Signed192 frameAxisZ,
 675        Signed576 denominator,
 676        out Fixed64 coordinate)
 677    {
 1746678        Signed320 originProjection = WideArithmetic.GetDotProduct3D(
 1746679            originX,
 1746680            originY,
 1746681            originZ,
 1746682            frameAxisX,
 1746683            frameAxisY,
 1746684            frameAxisZ);
 1746685        Signed576 rotatedProjection = WideArithmetic.AddSigned576(
 1746686            WideArithmetic.AddSigned576(
 1746687                WideArithmetic.MultiplySigned320(
 1746688                    rotatedX,
 1746689                    Signed320.ExtendValue(frameAxisX)),
 1746690                WideArithmetic.MultiplySigned320(
 1746691                    rotatedY,
 1746692                    Signed320.ExtendValue(frameAxisY))),
 1746693            WideArithmetic.MultiplySigned320(
 1746694                rotatedZ,
 1746695                Signed320.ExtendValue(frameAxisZ)));
 1746696        Signed576 numerator = WideArithmetic.AddSigned576(
 1746697            WideArithmetic.MultiplySigned320(
 1746698                originProjection,
 1746699                Signed320.ExtendValue(pointDenominator)),
 1746700            rotatedProjection);
 1746701        return Fixed64.TryGetSignedRawRatio(
 1746702            numerator,
 1746703            denominator,
 1746704            out coordinate);
 705    }
 706}

/home/runner/work/FixedMathSharp/FixedMathSharp/src/FixedMathSharp/Geometry/Anchors/Wide/WidePointAnchor3d.Distance.cs

#LineLine coverage
 1//=======================================================================
 2// WidePointAnchor3d.Distance.cs
 3//=======================================================================
 4// MIT License, Copyright (c) 2024-present David Oravsky (mrdav30)
 5// See LICENSE file in the project root for full license information.
 6//=======================================================================
 7
 8namespace FixedMathSharp.Geometry;
 9
 10/// <content>
 11/// Exact three-dimensional point-anchor distance operations.
 12/// </content>
 13internal static partial class WidePointAnchor3d
 14{
 15    internal static Vector3d GetDirection(
 16        in FixedPointAnchor first,
 17        in FixedPointAnchor second)
 18    {
 719        GetExactRelativeOffsetRatio(
 720            first.Origin,
 721            first.Rotation,
 722            first.LocalPoint,
 723            first.LocalDisplacement,
 724            first.LocalTranslation,
 725            first.ExactLocalTerm,
 726            second.Origin,
 727            second.Rotation,
 728            second.LocalPoint,
 729            second.LocalDisplacement,
 730            second.LocalTranslation,
 731            second.ExactLocalTerm,
 732            out Signed576 x,
 733            out Signed576 y,
 734            out Signed576 z,
 735            out _);
 736        return WideNormalization.GetNormalized(x, y, z);
 37    }
 38
 39    internal static int CompareSquaredDistances(
 40        in FixedPointAnchor reference,
 41        in FixedPointAnchor first,
 42        in FixedPointAnchor second)
 43    {
 4244        if (!reference.ExactLocalTerm.IsZero
 4245            || !first.ExactLocalTerm.IsZero
 4246            || !second.ExactLocalTerm.IsZero
 4247            || reference.LocalTranslation != Vector3d.Zero
 4248            || first.LocalTranslation != Vector3d.Zero
 4249            || second.LocalTranslation != Vector3d.Zero)
 50        {
 1351            return CompareExactSquaredDistances(
 1352                reference,
 1353                first,
 1354                second);
 55        }
 56
 2957        GetSquaredOffsetRatio(
 2958            first,
 2959            reference,
 2960            out Signed832 firstNumerator,
 2961            out Signed576 firstDenominator);
 2962        GetSquaredOffsetRatio(
 2963            second,
 2964            reference,
 2965            out Signed832 secondNumerator,
 2966            out Signed576 secondDenominator);
 2967        return WideArithmetic.CompareNonNegativeSquaredRatios(
 2968            firstNumerator,
 2969            firstDenominator,
 2970            secondNumerator,
 2971            secondDenominator);
 72    }
 73
 74    private static int CompareExactSquaredDistances(
 75        in FixedPointAnchor reference,
 76        in FixedPointAnchor first,
 77        in FixedPointAnchor second)
 78    {
 1379        GetExactSquaredOffsetRatio(
 1380            first,
 1381            reference,
 1382            out Signed832 firstNumerator,
 1383            out Signed576 firstDenominator);
 1384        GetExactSquaredOffsetRatio(
 1385            second,
 1386            reference,
 1387            out Signed832 secondNumerator,
 1388            out Signed576 secondDenominator);
 1389        return WideArithmetic.CompareNonNegativeSquaredRatios(
 1390            firstNumerator,
 1391            firstDenominator,
 1392            secondNumerator,
 1393            secondDenominator);
 94    }
 95
 96    private static void GetExactSquaredOffsetRatio(
 97        in FixedPointAnchor first,
 98        in FixedPointAnchor second,
 99        out Signed832 squaredNumerator,
 100        out Signed576 denominator)
 101    {
 26102        GetExactRelativeOffsetRatio(
 26103            first.Origin,
 26104            first.Rotation,
 26105            first.LocalPoint,
 26106            first.LocalDisplacement,
 26107            first.LocalTranslation,
 26108            first.ExactLocalTerm,
 26109            second.Origin,
 26110            second.Rotation,
 26111            second.LocalPoint,
 26112            second.LocalDisplacement,
 26113            second.LocalTranslation,
 26114            second.ExactLocalTerm,
 26115            out Signed576 x,
 26116            out Signed576 y,
 26117            out Signed576 z,
 26118            out denominator);
 26119        squaredNumerator = WideArithmetic.AddSigned832(
 26120            WideArithmetic.AddSigned832(
 26121                WideArithmetic.MultiplySigned576ToSigned832(x, x),
 26122                WideArithmetic.MultiplySigned576ToSigned832(y, y)),
 26123            WideArithmetic.MultiplySigned576ToSigned832(z, z));
 26124    }
 125
 126    private static void GetSquaredOffsetRatio(
 127        in FixedPointAnchor first,
 128        in FixedPointAnchor second,
 129        out Signed832 squaredNumerator,
 130        out Signed576 denominator)
 131    {
 58132        WideRationalBasis3d firstBasis = new(first.Rotation);
 58133        WideRationalBasis3d secondBasis = new(second.Rotation);
 58134        Signed320 coordinateDenominator =
 58135            WideArithmetic.MultiplySigned192(
 58136                firstBasis.Denominator,
 58137                secondBasis.Denominator);
 58138        Signed576 x = GetRelativeOffsetNumerator(
 58139            first.Origin.X,
 58140            firstBasis.Xx,
 58141            firstBasis.Yx,
 58142            firstBasis.Zx,
 58143            firstBasis.Denominator,
 58144            first.LocalPoint,
 58145            first.LocalDisplacement,
 58146            second.Origin.X,
 58147            secondBasis.Xx,
 58148            secondBasis.Yx,
 58149            secondBasis.Zx,
 58150            secondBasis.Denominator,
 58151            second.LocalPoint,
 58152            second.LocalDisplacement,
 58153            coordinateDenominator);
 58154        Signed576 y = GetRelativeOffsetNumerator(
 58155            first.Origin.Y,
 58156            firstBasis.Xy,
 58157            firstBasis.Yy,
 58158            firstBasis.Zy,
 58159            firstBasis.Denominator,
 58160            first.LocalPoint,
 58161            first.LocalDisplacement,
 58162            second.Origin.Y,
 58163            secondBasis.Xy,
 58164            secondBasis.Yy,
 58165            secondBasis.Zy,
 58166            secondBasis.Denominator,
 58167            second.LocalPoint,
 58168            second.LocalDisplacement,
 58169            coordinateDenominator);
 58170        Signed576 z = GetRelativeOffsetNumerator(
 58171            first.Origin.Z,
 58172            firstBasis.Xz,
 58173            firstBasis.Yz,
 58174            firstBasis.Zz,
 58175            firstBasis.Denominator,
 58176            first.LocalPoint,
 58177            first.LocalDisplacement,
 58178            second.Origin.Z,
 58179            secondBasis.Xz,
 58180            secondBasis.Yz,
 58181            secondBasis.Zz,
 58182            secondBasis.Denominator,
 58183            second.LocalPoint,
 58184            second.LocalDisplacement,
 58185            coordinateDenominator);
 58186        squaredNumerator = WideArithmetic.AddSigned832(
 58187            WideArithmetic.AddSigned832(
 58188                WideArithmetic.MultiplySigned576ToSigned832(x, x),
 58189                WideArithmetic.MultiplySigned576ToSigned832(y, y)),
 58190            WideArithmetic.MultiplySigned576ToSigned832(z, z));
 58191        denominator = Signed576.ExtendValue(
 58192            coordinateDenominator);
 58193    }
 194}

/home/runner/work/FixedMathSharp/FixedMathSharp/src/FixedMathSharp/Geometry/Anchors/Wide/WidePointAnchor3d.Exact.cs

#LineLine coverage
 1//=======================================================================
 2// WidePointAnchor3d.Exact.cs
 3//=======================================================================
 4// MIT License, Copyright (c) 2024-present David Oravsky (mrdav30)
 5// See LICENSE file in the project root for full license information.
 6//=======================================================================
 7
 8using System;
 9
 10namespace FixedMathSharp.Geometry;
 11
 12/// <content>
 13/// Exact three-dimensional point-anchor term operations.
 14/// </content>
 15internal static partial class WidePointAnchor3d
 16{
 17    internal static bool TryGetPointInFrame(in FixedPointAnchor anchor, Vector3d samplingOrigin, out Vector3d point)
 18    {
 35319        WideRationalBasis3d basis = new(anchor.Rotation);
 35320        Signed320 denominator = GetAnchorDenominator(basis);
 70621        Span<ulong> denominatorWords = stackalloc ulong[9], numeratorWords = stackalloc ulong[9];
 35322        WideArithmetic.GetMagnitude(Signed576.ExtendValue(denominator), denominatorWords);
 35323        Span<Fixed64> coordinates = stackalloc Fixed64[3];
 280624        for (int axis = 0; axis < 3; axis++)
 25        {
 105326            Signed320 numerator = GetAnchorDeltaNumerator(anchor.Origin[axis], samplingOrigin[axis],
 105327                axis == 0 ? basis.Xx : axis == 1 ? basis.Xy : basis.Xz,
 105328                axis == 0 ? basis.Yx : axis == 1 ? basis.Yy : basis.Yz,
 105329                axis == 0 ? basis.Zx : axis == 1 ? basis.Zy : basis.Zz,
 105330                basis, anchor.LocalPoint, anchor.LocalDisplacement, anchor.LocalTranslation, anchor.ExactLocalTerm, deno
 105331            WideArithmetic.GetMagnitude(Signed576.ExtendValue(numerator), numeratorWords);
 32            // Preserve global half-tie parity without requiring a representable
 33            // absolute coordinate. No intermediate origin difference is narrowed.
 105334            if (!Fixed64.TryGetSignedRawRatio(numeratorWords, denominatorWords, numerator.Sign < 0,
 105335                out coordinates[axis], samplingOrigin[axis].m_rawValue))
 36            {
 337                point = default;
 338                return false;
 39            }
 40        }
 35041        point = new Vector3d(coordinates[0], coordinates[1], coordinates[2]);
 35042        return true;
 43    }
 44
 45    // Compare dot(first-second, direction) with dot(third-fourth, direction).
 46    // Keep both signed ratios exact: materializing either projection would
 47    // lose sub-raw distinctions or saturate unrelated large offsets equally.
 48    internal static int CompareProjectedOffsets(
 49        in FixedPointAnchor first,
 50        in FixedPointAnchor second,
 51        in FixedPointAnchor third,
 52        in FixedPointAnchor fourth,
 53        Vector3d direction) =>
 1854        CompareProjectedOffsets(first, second, third, fourth, direction, direction);
 55
 56    internal static int CompareProjectedOffsets(
 57        in FixedPointAnchor first,
 58        in FixedPointAnchor second,
 59        in FixedPointAnchor third,
 60        in FixedPointAnchor fourth,
 61        Vector3d firstDirection,
 62        Vector3d secondDirection)
 63    {
 2064        GetExactProjectedOffsetRatio(
 2065            first.Origin, first.Rotation, first.LocalPoint,
 2066            first.LocalDisplacement, first.LocalTranslation, first.ExactLocalTerm,
 2067            second.Origin, second.Rotation, second.LocalPoint,
 2068            second.LocalDisplacement, second.LocalTranslation, second.ExactLocalTerm,
 2069            firstDirection, out Signed704 left, out Signed704 leftDenominator);
 2070        GetExactProjectedOffsetRatio(
 2071            third.Origin, third.Rotation, third.LocalPoint,
 2072            third.LocalDisplacement, third.LocalTranslation, third.ExactLocalTerm,
 2073            fourth.Origin, fourth.Rotation, fourth.LocalPoint,
 2074            fourth.LocalDisplacement, fourth.LocalTranslation, fourth.ExactLocalTerm,
 2075            secondDirection, out Signed704 right, out Signed704 rightDenominator);
 2076        int sign = left.Sign;
 2077        int signComparison = sign.CompareTo(right.Sign);
 2078        if (signComparison != 0)
 679            return signComparison;
 1480        if (sign == 0)
 281            return 0;
 82
 83        // The positive denominators and 704-bit signed numerators extend
 84        // losslessly; the existing full products retain all 1408 bits.
 1285        return sign * WideArithmetic.CompareNonNegativeProducts(
 1286            Signed832.ExtendValue(left), Signed832.ExtendValue(rightDenominator),
 1287            Signed832.ExtendValue(right), Signed832.ExtendValue(leftDenominator));
 88    }
 89
 90    internal static bool TryGetPoint(
 91        Vector3d origin,
 92        FixedQuaternion rotation,
 93        Vector3d localPoint,
 94        Vector3d localDisplacement,
 95        Vector3d localTranslation,
 96        FixedPointAnchorTerm3d exactLocalTerm,
 97        out Vector3d point)
 98    {
 514399        if (exactLocalTerm.IsZero
 5143100            && localTranslation == Vector3d.Zero)
 101        {
 5033102            return TryGetPoint(
 5033103                origin,
 5033104                rotation,
 5033105                localPoint,
 5033106                localDisplacement,
 5033107                out point);
 108        }
 109
 110110        WideRationalBasis3d basis = new(rotation);
 110111        Signed320 denominator = GetAnchorDenominator(basis);
 110112        Signed576 denominatorWide =
 110113            Signed576.ExtendValue(denominator);
 110114        bool representable = Fixed64.TryGetSignedRawRatio(
 110115                Signed576.ExtendValue(
 110116                    GetAnchorCoordinateNumerator(
 110117                        origin.X,
 110118                        basis.Xx,
 110119                        basis.Yx,
 110120                        basis.Zx,
 110121                        basis,
 110122                        localPoint,
 110123                        localDisplacement,
 110124                        localTranslation,
 110125                        exactLocalTerm)),
 110126                denominatorWide,
 110127                out Fixed64 x)
 110128            & Fixed64.TryGetSignedRawRatio(
 110129                Signed576.ExtendValue(
 110130                    GetAnchorCoordinateNumerator(
 110131                        origin.Y,
 110132                        basis.Xy,
 110133                        basis.Yy,
 110134                        basis.Zy,
 110135                        basis,
 110136                        localPoint,
 110137                        localDisplacement,
 110138                        localTranslation,
 110139                        exactLocalTerm)),
 110140                denominatorWide,
 110141                out Fixed64 y)
 110142            & Fixed64.TryGetSignedRawRatio(
 110143                Signed576.ExtendValue(
 110144                    GetAnchorCoordinateNumerator(
 110145                        origin.Z,
 110146                        basis.Xz,
 110147                        basis.Yz,
 110148                        basis.Zz,
 110149                        basis,
 110150                        localPoint,
 110151                        localDisplacement,
 110152                        localTranslation,
 110153                        exactLocalTerm)),
 110154                denominatorWide,
 110155                out Fixed64 z);
 110156        point = representable ? new Vector3d(x, y, z) : default;
 110157        return representable;
 158    }
 159
 160    internal static bool TryGetRelativeOffset(
 161        Vector3d firstOrigin,
 162        FixedQuaternion firstRotation,
 163        Vector3d firstLocalPoint,
 164        Vector3d firstLocalDisplacement,
 165        Vector3d firstLocalTranslation,
 166        FixedPointAnchorTerm3d firstExactLocalTerm,
 167        Vector3d secondOrigin,
 168        FixedQuaternion secondRotation,
 169        Vector3d secondLocalPoint,
 170        Vector3d secondLocalDisplacement,
 171        Vector3d secondLocalTranslation,
 172        FixedPointAnchorTerm3d secondExactLocalTerm,
 173        Fixed64 scale,
 174        out Vector3d offset)
 175    {
 1834176        if (firstExactLocalTerm.IsZero
 1834177            && secondExactLocalTerm.IsZero
 1834178            && firstLocalTranslation == Vector3d.Zero
 1834179            && secondLocalTranslation == Vector3d.Zero)
 180        {
 1782181            return TryGetRelativeOffset(
 1782182                firstOrigin,
 1782183                firstRotation,
 1782184                firstLocalPoint,
 1782185                firstLocalDisplacement,
 1782186                secondOrigin,
 1782187                secondRotation,
 1782188                secondLocalPoint,
 1782189                secondLocalDisplacement,
 1782190                scale,
 1782191                out offset);
 192        }
 193
 52194        GetExactRelativeOffsetRatio(
 52195            firstOrigin,
 52196            firstRotation,
 52197            firstLocalPoint,
 52198            firstLocalDisplacement,
 52199            firstLocalTranslation,
 52200            firstExactLocalTerm,
 52201            secondOrigin,
 52202            secondRotation,
 52203            secondLocalPoint,
 52204            secondLocalDisplacement,
 52205            secondLocalTranslation,
 52206            secondExactLocalTerm,
 52207            out Signed576 xNumerator,
 52208            out Signed576 yNumerator,
 52209            out Signed576 zNumerator,
 52210            out Signed576 denominator);
 52211        bool representable = TryGetScaledExactCoordinate(
 52212                xNumerator,
 52213                denominator,
 52214                scale,
 52215                out Fixed64 x)
 52216            & TryGetScaledExactCoordinate(
 52217                yNumerator,
 52218                denominator,
 52219                scale,
 52220                out Fixed64 y)
 52221            & TryGetScaledExactCoordinate(
 52222                zNumerator,
 52223                denominator,
 52224                scale,
 52225                out Fixed64 z);
 52226        offset = representable ? new Vector3d(x, y, z) : default;
 52227        return representable;
 228    }
 229
 230    internal static bool RepresentsSamePoint(
 231        in FixedPointAnchor first,
 232        in FixedPointAnchor second)
 233    {
 3234        GetExactRelativeOffsetRatio(
 3235            first.Origin,
 3236            first.Rotation,
 3237            first.LocalPoint,
 3238            first.LocalDisplacement,
 3239            first.LocalTranslation,
 3240            first.ExactLocalTerm,
 3241            second.Origin,
 3242            second.Rotation,
 3243            second.LocalPoint,
 3244            second.LocalDisplacement,
 3245            second.LocalTranslation,
 3246            second.ExactLocalTerm,
 3247            out Signed576 x,
 3248            out Signed576 y,
 3249            out Signed576 z,
 3250            out _);
 3251        return x.IsZero && y.IsZero && z.IsZero;
 252    }
 253
 254    internal static bool TryGetLocalPointIn(
 255        Vector3d pointOrigin,
 256        FixedQuaternion pointRotation,
 257        Vector3d pointLocalPoint,
 258        Vector3d pointLocalDisplacement,
 259        Vector3d pointLocalTranslation,
 260        FixedPointAnchorTerm3d exactLocalTerm,
 261        Vector3d frameOrigin,
 262        FixedQuaternion frameRotation,
 263        out Vector3d localPoint)
 264    {
 4810265        if (exactLocalTerm.IsZero
 4810266            && pointLocalTranslation == Vector3d.Zero)
 267        {
 4798268            return TryGetLocalPointIn(
 4798269                pointOrigin,
 4798270                pointRotation,
 4798271                pointLocalPoint,
 4798272                pointLocalDisplacement,
 4798273                frameOrigin,
 4798274                frameRotation,
 4798275                out localPoint);
 276        }
 277
 12278        WideRationalBasis3d pointBasis = new(pointRotation);
 12279        WideRationalBasis3d frameBasis = new(frameRotation);
 12280        Signed320 pointDenominator = GetAnchorDenominator(pointBasis);
 12281        Signed320 deltaX = GetAnchorDeltaNumerator(
 12282            pointOrigin.X,
 12283            frameOrigin.X,
 12284            pointBasis.Xx,
 12285            pointBasis.Yx,
 12286            pointBasis.Zx,
 12287            pointBasis,
 12288            pointLocalPoint,
 12289            pointLocalDisplacement,
 12290            pointLocalTranslation,
 12291            exactLocalTerm,
 12292            pointDenominator);
 12293        Signed320 deltaY = GetAnchorDeltaNumerator(
 12294            pointOrigin.Y,
 12295            frameOrigin.Y,
 12296            pointBasis.Xy,
 12297            pointBasis.Yy,
 12298            pointBasis.Zy,
 12299            pointBasis,
 12300            pointLocalPoint,
 12301            pointLocalDisplacement,
 12302            pointLocalTranslation,
 12303            exactLocalTerm,
 12304            pointDenominator);
 12305        Signed320 deltaZ = GetAnchorDeltaNumerator(
 12306            pointOrigin.Z,
 12307            frameOrigin.Z,
 12308            pointBasis.Xz,
 12309            pointBasis.Yz,
 12310            pointBasis.Zz,
 12311            pointBasis,
 12312            pointLocalPoint,
 12313            pointLocalDisplacement,
 12314            pointLocalTranslation,
 12315            exactLocalTerm,
 12316            pointDenominator);
 12317        Signed576 denominator = WideArithmetic.MultiplySigned320(
 12318            pointDenominator,
 12319            Signed320.ExtendValue(frameBasis.Denominator));
 12320        bool representable = Fixed64.TryGetSignedRawRatio(
 12321                GetWideProjection(
 12322                    deltaX,
 12323                    deltaY,
 12324                    deltaZ,
 12325                    frameBasis.Xx,
 12326                    frameBasis.Xy,
 12327                    frameBasis.Xz),
 12328                denominator,
 12329                out Fixed64 x)
 12330            & Fixed64.TryGetSignedRawRatio(
 12331                GetWideProjection(
 12332                    deltaX,
 12333                    deltaY,
 12334                    deltaZ,
 12335                    frameBasis.Yx,
 12336                    frameBasis.Yy,
 12337                    frameBasis.Yz),
 12338                denominator,
 12339                out Fixed64 y)
 12340            & Fixed64.TryGetSignedRawRatio(
 12341                GetWideProjection(
 12342                    deltaX,
 12343                    deltaY,
 12344                    deltaZ,
 12345                    frameBasis.Zx,
 12346                    frameBasis.Zy,
 12347                    frameBasis.Zz),
 12348                denominator,
 12349                out Fixed64 z);
 12350        localPoint = representable ? new Vector3d(x, y, z) : default;
 12351        return representable;
 352    }
 353
 354    internal static bool TryGetProjectedOffset(
 355        Vector3d firstOrigin,
 356        FixedQuaternion firstRotation,
 357        Vector3d firstLocalPoint,
 358        Vector3d firstLocalDisplacement,
 359        Vector3d firstLocalTranslation,
 360        FixedPointAnchorTerm3d firstExactLocalTerm,
 361        Vector3d secondOrigin,
 362        FixedQuaternion secondRotation,
 363        Vector3d secondLocalPoint,
 364        Vector3d secondLocalDisplacement,
 365        Vector3d secondLocalTranslation,
 366        FixedPointAnchorTerm3d secondExactLocalTerm,
 367        Vector3d direction,
 368        out Fixed64 projection)
 369    {
 278370        if (firstExactLocalTerm.IsZero
 278371            && secondExactLocalTerm.IsZero
 278372            && firstLocalTranslation == Vector3d.Zero
 278373            && secondLocalTranslation == Vector3d.Zero)
 374        {
 262375            return TryGetProjectedOffset(
 262376                firstOrigin,
 262377                firstRotation,
 262378                firstLocalPoint,
 262379                firstLocalDisplacement,
 262380                secondOrigin,
 262381                secondRotation,
 262382                secondLocalPoint,
 262383                secondLocalDisplacement,
 262384                direction,
 262385                out projection);
 386        }
 387
 16388        GetExactProjectedOffsetRatio(
 16389            firstOrigin,
 16390            firstRotation,
 16391            firstLocalPoint,
 16392            firstLocalDisplacement,
 16393            firstLocalTranslation,
 16394            firstExactLocalTerm,
 16395            secondOrigin,
 16396            secondRotation,
 16397            secondLocalPoint,
 16398            secondLocalDisplacement,
 16399            secondLocalTranslation,
 16400            secondExactLocalTerm,
 16401            direction,
 16402            out Signed704 numerator,
 16403            out Signed704 denominator);
 16404        return Fixed64.TryGetSignedRawRatio(
 16405            numerator,
 16406            denominator,
 16407            out projection);
 408    }
 409
 410    internal static Fixed64 ProjectNonNegativeOffset(
 411        Vector3d firstOrigin,
 412        FixedQuaternion firstRotation,
 413        Vector3d firstLocalPoint,
 414        Vector3d firstLocalDisplacement,
 415        Vector3d firstLocalTranslation,
 416        FixedPointAnchorTerm3d firstExactLocalTerm,
 417        Vector3d secondOrigin,
 418        FixedQuaternion secondRotation,
 419        Vector3d secondLocalPoint,
 420        Vector3d secondLocalDisplacement,
 421        Vector3d secondLocalTranslation,
 422        FixedPointAnchorTerm3d secondExactLocalTerm,
 423        Vector3d direction)
 424    {
 289425        if (firstExactLocalTerm.IsZero
 289426            && secondExactLocalTerm.IsZero
 289427            && firstLocalTranslation == Vector3d.Zero
 289428            && secondLocalTranslation == Vector3d.Zero)
 429        {
 286430            return ProjectNonNegativeOffset(
 286431                firstOrigin,
 286432                firstRotation,
 286433                firstLocalPoint,
 286434                firstLocalDisplacement,
 286435                secondOrigin,
 286436                secondRotation,
 286437                secondLocalPoint,
 286438                secondLocalDisplacement,
 286439                direction);
 440        }
 441
 3442        GetExactProjectedOffsetRatio(
 3443            firstOrigin,
 3444            firstRotation,
 3445            firstLocalPoint,
 3446            firstLocalDisplacement,
 3447            firstLocalTranslation,
 3448            firstExactLocalTerm,
 3449            secondOrigin,
 3450            secondRotation,
 3451            secondLocalPoint,
 3452            secondLocalDisplacement,
 3453            secondLocalTranslation,
 3454            secondExactLocalTerm,
 3455            direction,
 3456            out Signed704 numerator,
 3457            out Signed704 denominator);
 3458        return Fixed64.GetNonNegativeRawRatioFloor(
 3459            numerator,
 3460            denominator);
 461    }
 462
 463    private static void GetExactProjectedOffsetRatio(
 464        Vector3d firstOrigin,
 465        FixedQuaternion firstRotation,
 466        Vector3d firstLocalPoint,
 467        Vector3d firstLocalDisplacement,
 468        Vector3d firstLocalTranslation,
 469        FixedPointAnchorTerm3d firstExactLocalTerm,
 470        Vector3d secondOrigin,
 471        FixedQuaternion secondRotation,
 472        Vector3d secondLocalPoint,
 473        Vector3d secondLocalDisplacement,
 474        Vector3d secondLocalTranslation,
 475        FixedPointAnchorTerm3d secondExactLocalTerm,
 476        Vector3d direction,
 477        out Signed704 numerator,
 478        out Signed704 denominator)
 479    {
 59480        GetExactRelativeOffsetRatio(
 59481            firstOrigin,
 59482            firstRotation,
 59483            firstLocalPoint,
 59484            firstLocalDisplacement,
 59485            firstLocalTranslation,
 59486            firstExactLocalTerm,
 59487            secondOrigin,
 59488            secondRotation,
 59489            secondLocalPoint,
 59490            secondLocalDisplacement,
 59491            secondLocalTranslation,
 59492            secondExactLocalTerm,
 59493            out Signed576 x,
 59494            out Signed576 y,
 59495            out Signed576 z,
 59496            out Signed576 coordinateDenominator);
 59497        numerator = WideArithmetic.AddSigned704(
 59498            WideArithmetic.AddSigned704(
 59499                WideArithmetic.MultiplySigned576ToSigned704(
 59500                    x,
 59501                    Signed320.ExtendValue(Signed192.Raw(direction.X))),
 59502                WideArithmetic.MultiplySigned576ToSigned704(
 59503                    y,
 59504                    Signed320.ExtendValue(Signed192.Raw(direction.Y)))),
 59505            WideArithmetic.MultiplySigned576ToSigned704(
 59506                z,
 59507                Signed320.ExtendValue(Signed192.Raw(direction.Z))));
 59508        denominator = WideArithmetic.MultiplySigned576ToSigned704(
 59509            coordinateDenominator,
 59510            Signed320.ExtendValue(Signed192.One));
 59511    }
 512
 513    internal static void GetExactRelativeOffsetRatio(
 514        Vector3d firstOrigin,
 515        FixedQuaternion firstRotation,
 516        Vector3d firstLocalPoint,
 517        Vector3d firstLocalDisplacement,
 518        Vector3d firstLocalTranslation,
 519        FixedPointAnchorTerm3d firstExactLocalTerm,
 520        Vector3d secondOrigin,
 521        FixedQuaternion secondRotation,
 522        Vector3d secondLocalPoint,
 523        Vector3d secondLocalDisplacement,
 524        Vector3d secondLocalTranslation,
 525        FixedPointAnchorTerm3d secondExactLocalTerm,
 526        out Signed576 x,
 527        out Signed576 y,
 528        out Signed576 z,
 529        out Signed576 denominator)
 530    {
 147531        WideRationalBasis3d firstBasis = new(firstRotation);
 147532        WideRationalBasis3d secondBasis = new(secondRotation);
 147533        Signed320 firstDenominator = GetAnchorDenominator(firstBasis);
 147534        Signed320 secondDenominator = GetAnchorDenominator(secondBasis);
 147535        denominator = WideArithmetic.MultiplySigned320(
 147536            firstDenominator,
 147537            secondDenominator);
 147538        x = GetExactRelativeOffsetNumerator(
 147539            firstOrigin.X,
 147540            firstBasis.Xx,
 147541            firstBasis.Yx,
 147542            firstBasis.Zx,
 147543            firstBasis,
 147544            firstLocalPoint,
 147545            firstLocalDisplacement,
 147546            firstLocalTranslation,
 147547            firstExactLocalTerm,
 147548            firstDenominator,
 147549            secondOrigin.X,
 147550            secondBasis.Xx,
 147551            secondBasis.Yx,
 147552            secondBasis.Zx,
 147553            secondBasis,
 147554            secondLocalPoint,
 147555            secondLocalDisplacement,
 147556            secondLocalTranslation,
 147557            secondExactLocalTerm,
 147558            secondDenominator);
 147559        y = GetExactRelativeOffsetNumerator(
 147560            firstOrigin.Y,
 147561            firstBasis.Xy,
 147562            firstBasis.Yy,
 147563            firstBasis.Zy,
 147564            firstBasis,
 147565            firstLocalPoint,
 147566            firstLocalDisplacement,
 147567            firstLocalTranslation,
 147568            firstExactLocalTerm,
 147569            firstDenominator,
 147570            secondOrigin.Y,
 147571            secondBasis.Xy,
 147572            secondBasis.Yy,
 147573            secondBasis.Zy,
 147574            secondBasis,
 147575            secondLocalPoint,
 147576            secondLocalDisplacement,
 147577            secondLocalTranslation,
 147578            secondExactLocalTerm,
 147579            secondDenominator);
 147580        z = GetExactRelativeOffsetNumerator(
 147581            firstOrigin.Z,
 147582            firstBasis.Xz,
 147583            firstBasis.Yz,
 147584            firstBasis.Zz,
 147585            firstBasis,
 147586            firstLocalPoint,
 147587            firstLocalDisplacement,
 147588            firstLocalTranslation,
 147589            firstExactLocalTerm,
 147590            firstDenominator,
 147591            secondOrigin.Z,
 147592            secondBasis.Xz,
 147593            secondBasis.Yz,
 147594            secondBasis.Zz,
 147595            secondBasis,
 147596            secondLocalPoint,
 147597            secondLocalDisplacement,
 147598            secondLocalTranslation,
 147599            secondExactLocalTerm,
 147600            secondDenominator);
 147601    }
 602
 603    private static Signed576 GetExactRelativeOffsetNumerator(
 604        Fixed64 firstOrigin,
 605        Signed192 firstAxisX,
 606        Signed192 firstAxisY,
 607        Signed192 firstAxisZ,
 608        WideRationalBasis3d firstBasis,
 609        Vector3d firstLocalPoint,
 610        Vector3d firstLocalDisplacement,
 611        Vector3d firstLocalTranslation,
 612        FixedPointAnchorTerm3d firstExactLocalTerm,
 613        Signed320 firstDenominator,
 614        Fixed64 secondOrigin,
 615        Signed192 secondAxisX,
 616        Signed192 secondAxisY,
 617        Signed192 secondAxisZ,
 618        WideRationalBasis3d secondBasis,
 619        Vector3d secondLocalPoint,
 620        Vector3d secondLocalDisplacement,
 621        Vector3d secondLocalTranslation,
 622        FixedPointAnchorTerm3d secondExactLocalTerm,
 623        Signed320 secondDenominator) =>
 441624        WideArithmetic.SubtractSigned576(
 441625            WideArithmetic.MultiplySigned320(
 441626                GetAnchorCoordinateNumerator(
 441627                    firstOrigin,
 441628                    firstAxisX,
 441629                    firstAxisY,
 441630                    firstAxisZ,
 441631                    firstBasis,
 441632                    firstLocalPoint,
 441633                    firstLocalDisplacement,
 441634                    firstLocalTranslation,
 441635                    firstExactLocalTerm),
 441636                secondDenominator),
 441637            WideArithmetic.MultiplySigned320(
 441638                GetAnchorCoordinateNumerator(
 441639                    secondOrigin,
 441640                    secondAxisX,
 441641                    secondAxisY,
 441642                    secondAxisZ,
 441643                    secondBasis,
 441644                    secondLocalPoint,
 441645                    secondLocalDisplacement,
 441646                    secondLocalTranslation,
 441647                    secondExactLocalTerm),
 441648                firstDenominator));
 649
 650    private static Signed320 GetAnchorCoordinateNumerator(
 651        Fixed64 origin,
 652        Signed192 axisX,
 653        Signed192 axisY,
 654        Signed192 axisZ,
 655        WideRationalBasis3d basis,
 656        Vector3d localPoint,
 657        Vector3d localDisplacement,
 658        Vector3d localTranslation,
 659        FixedPointAnchorTerm3d exactLocalTerm)
 660    {
 2301661        Signed320 roundedNumerator = WideArithmetic.AddSigned320(
 2301662            WideArithmetic.MultiplySigned192(
 2301663                Signed192.Raw(origin),
 2301664                basis.Denominator),
 2301665            WideArithmetic.AddSigned320(
 2301666                WideArithmetic.AddSigned320(
 2301667                    WideArithmetic.GetDotProduct3D(
 2301668                        Signed192.Raw(localPoint.X),
 2301669                        Signed192.Raw(localPoint.Y),
 2301670                        Signed192.Raw(localPoint.Z),
 2301671                        axisX,
 2301672                        axisY,
 2301673                        axisZ),
 2301674                    WideArithmetic.GetDotProduct3D(
 2301675                        Signed192.Raw(localDisplacement.X),
 2301676                        Signed192.Raw(localDisplacement.Y),
 2301677                        Signed192.Raw(localDisplacement.Z),
 2301678                        axisX,
 2301679                        axisY,
 2301680                        axisZ)),
 2301681                WideArithmetic.GetDotProduct3D(
 2301682                    Signed192.Raw(localTranslation.X),
 2301683                    Signed192.Raw(localTranslation.Y),
 2301684                    Signed192.Raw(localTranslation.Z),
 2301685                    axisX,
 2301686                    axisY,
 2301687                    axisZ)));
 2301688        Signed576 scaledRounded = WideArithmetic.MultiplySigned320(
 2301689            roundedNumerator,
 2301690            Signed320.ExtendValue(
 2301691                FixedPointAnchorTerm3d.Denominator));
 2301692        Signed320 residualProjection = WideArithmetic.GetDotProduct3D(
 2301693            Signed192.Signed(exactLocalTerm.X),
 2301694            Signed192.Signed(exactLocalTerm.Y),
 2301695            Signed192.Signed(exactLocalTerm.Z),
 2301696            axisX,
 2301697            axisY,
 2301698            axisZ);
 2301699        return WideArithmetic.AddSigned320(
 2301700            Signed320.NarrowValue(scaledRounded),
 2301701            residualProjection);
 702    }
 703
 704    private static Signed320 GetAnchorDenominator(WideRationalBasis3d basis) =>
 769705        WideArithmetic.MultiplySigned192(
 769706            basis.Denominator,
 769707            FixedPointAnchorTerm3d.Denominator);
 708
 709    private static Signed320 GetAnchorDeltaNumerator(
 710        Fixed64 pointOrigin,
 711        Fixed64 frameOrigin,
 712        Signed192 axisX,
 713        Signed192 axisY,
 714        Signed192 axisZ,
 715        WideRationalBasis3d pointBasis,
 716        Vector3d pointLocalPoint,
 717        Vector3d pointLocalDisplacement,
 718        Vector3d pointLocalTranslation,
 719        FixedPointAnchorTerm3d exactLocalTerm,
 720        Signed320 pointDenominator) =>
 1089721        WideArithmetic.SubtractSigned320(
 1089722            GetAnchorCoordinateNumerator(
 1089723                pointOrigin,
 1089724                axisX,
 1089725                axisY,
 1089726                axisZ,
 1089727                pointBasis,
 1089728                pointLocalPoint,
 1089729                pointLocalDisplacement,
 1089730                pointLocalTranslation,
 1089731                exactLocalTerm),
 1089732            WideArithmetic.MultiplySigned192(
 1089733                Signed192.Raw(frameOrigin),
 1089734                Signed192.NarrowValue(pointDenominator)));
 735
 736    private static Signed576 GetWideProjection(
 737        Signed320 x,
 738        Signed320 y,
 739        Signed320 z,
 740        Signed192 axisX,
 741        Signed192 axisY,
 742        Signed192 axisZ) =>
 36743        WideArithmetic.AddSigned576(
 36744            WideArithmetic.AddSigned576(
 36745                WideArithmetic.MultiplySigned320(
 36746                    x,
 36747                    Signed320.ExtendValue(axisX)),
 36748                WideArithmetic.MultiplySigned320(
 36749                    y,
 36750                    Signed320.ExtendValue(axisY))),
 36751            WideArithmetic.MultiplySigned320(
 36752                z,
 36753                Signed320.ExtendValue(axisZ)));
 754
 755    private static bool TryGetScaledExactCoordinate(
 756        Signed576 numerator,
 757        Signed576 denominator,
 758        Fixed64 scale,
 759        out Fixed64 coordinate)
 760    {
 156761        if (scale == Fixed64.One)
 762        {
 144763            return Fixed64.TryGetSignedRawRatio(
 144764                numerator,
 144765                denominator,
 144766                out coordinate);
 767        }
 12768        return Fixed64.TryGetSignedRawRatio(
 12769            WideArithmetic.MultiplySigned576ToSigned704(
 12770                numerator,
 12771                Signed320.ExtendValue(Signed192.Raw(scale))),
 12772            WideArithmetic.MultiplySigned576ToSigned704(
 12773                denominator,
 12774                Signed320.ExtendValue(Signed192.One)),
 12775            out coordinate);
 776    }
 777}

Methods/Properties

TryGetPoint(FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d&)
TryGetRelativeOffset(FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Fixed64,FixedMathSharp.Vector3d&)
TryScaleOffset(FixedMathSharp.Vector3d,FixedMathSharp.Fixed64,FixedMathSharp.Vector3d&)
TryGetLocalPointIn(FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d&)
TryGetProjectedOffset(FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Fixed64&)
ProjectNonNegativeOffset(FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d)
GetProjectedOffsetRatio(FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Signed704&,FixedMathSharp.Signed704&)
TryGetPointCoordinate(FixedMathSharp.Fixed64,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed576,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Fixed64&)
TryGetRelativeOffsetCoordinate(FixedMathSharp.Fixed64,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Fixed64,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Signed320,FixedMathSharp.Signed576,FixedMathSharp.Fixed64,FixedMathSharp.Fixed64&)
GetRelativeOffsetNumerator(FixedMathSharp.Fixed64,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Fixed64,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Signed320)
TryGetLocalPointCoordinate(FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed320,FixedMathSharp.Signed320,FixedMathSharp.Signed320,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed576,FixedMathSharp.Fixed64&)
GetDirection(FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Geometry.FixedPointAnchor&)
CompareSquaredDistances(FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Geometry.FixedPointAnchor&)
CompareExactSquaredDistances(FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Geometry.FixedPointAnchor&)
GetExactSquaredOffsetRatio(FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Signed832&,FixedMathSharp.Signed576&)
GetSquaredOffsetRatio(FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Signed832&,FixedMathSharp.Signed576&)
TryGetPointInFrame(FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d&)
CompareProjectedOffsets(FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Vector3d)
CompareProjectedOffsets(FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d)
TryGetPoint(FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Geometry.FixedPointAnchorTerm3d,FixedMathSharp.Vector3d&)
TryGetRelativeOffset(FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Geometry.FixedPointAnchorTerm3d,FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Geometry.FixedPointAnchorTerm3d,FixedMathSharp.Fixed64,FixedMathSharp.Vector3d&)
RepresentsSamePoint(FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Geometry.FixedPointAnchor&)
TryGetLocalPointIn(FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Geometry.FixedPointAnchorTerm3d,FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d&)
TryGetProjectedOffset(FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Geometry.FixedPointAnchorTerm3d,FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Geometry.FixedPointAnchorTerm3d,FixedMathSharp.Vector3d,FixedMathSharp.Fixed64&)
ProjectNonNegativeOffset(FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Geometry.FixedPointAnchorTerm3d,FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Geometry.FixedPointAnchorTerm3d,FixedMathSharp.Vector3d)
GetExactProjectedOffsetRatio(FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Geometry.FixedPointAnchorTerm3d,FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Geometry.FixedPointAnchorTerm3d,FixedMathSharp.Vector3d,FixedMathSharp.Signed704&,FixedMathSharp.Signed704&)
GetExactRelativeOffsetRatio(FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Geometry.FixedPointAnchorTerm3d,FixedMathSharp.Vector3d,FixedMathSharp.FixedQuaternion,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Geometry.FixedPointAnchorTerm3d,FixedMathSharp.Signed576&,FixedMathSharp.Signed576&,FixedMathSharp.Signed576&,FixedMathSharp.Signed576&)
GetExactRelativeOffsetNumerator(FixedMathSharp.Fixed64,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Geometry.WideRationalBasis3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Geometry.FixedPointAnchorTerm3d,FixedMathSharp.Signed320,FixedMathSharp.Fixed64,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Geometry.WideRationalBasis3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Geometry.FixedPointAnchorTerm3d,FixedMathSharp.Signed320)
GetAnchorCoordinateNumerator(FixedMathSharp.Fixed64,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Geometry.WideRationalBasis3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Geometry.FixedPointAnchorTerm3d)
GetAnchorDenominator(FixedMathSharp.Geometry.WideRationalBasis3d)
GetAnchorDeltaNumerator(FixedMathSharp.Fixed64,FixedMathSharp.Fixed64,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Geometry.WideRationalBasis3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Geometry.FixedPointAnchorTerm3d,FixedMathSharp.Signed320)
GetWideProjection(FixedMathSharp.Signed320,FixedMathSharp.Signed320,FixedMathSharp.Signed320,FixedMathSharp.Signed192,FixedMathSharp.Signed192,FixedMathSharp.Signed192)
TryGetScaledExactCoordinate(FixedMathSharp.Signed576,FixedMathSharp.Signed576,FixedMathSharp.Fixed64,FixedMathSharp.Fixed64&)