< Summary

Line coverage
100%
Covered lines: 1158
Uncovered lines: 0
Coverable lines: 1158
Total lines: 1640
Line coverage: 100%
Branch coverage
100%
Covered branches: 92
Total branches: 92
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%22100%
File 1: TryGetProjectedOffset(...)100%11100%
File 1: ProjectNonNegativeOffset(...)100%11100%
File 1: GetProjectedOffsetRatio(...)100%44100%
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: 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>
 14internal static partial class WidePointAnchor3d
 15{
 16    internal static bool TryGetPoint(
 17        Vector3d origin,
 18        FixedQuaternion rotation,
 19        Vector3d localPoint,
 20        Vector3d localDisplacement,
 21        out Vector3d point)
 22    {
 60423        WideRationalBasis3d basis = new(rotation);
 60424        Signed576 denominator =
 60425            Signed576.ExtendValue(
 60426                Signed320.ExtendValue(basis.Denominator));
 60427        bool representable = TryGetPointCoordinate(
 60428            origin.X,
 60429            basis.Xx,
 60430            basis.Yx,
 60431            basis.Zx,
 60432            basis.Denominator,
 60433            denominator,
 60434            localPoint,
 60435            localDisplacement,
 60436            out Fixed64 x)
 60437            & TryGetPointCoordinate(
 60438                origin.Y,
 60439                basis.Xy,
 60440                basis.Yy,
 60441                basis.Zy,
 60442                basis.Denominator,
 60443                denominator,
 60444                localPoint,
 60445                localDisplacement,
 60446                out Fixed64 y)
 60447            & TryGetPointCoordinate(
 60448                origin.Z,
 60449                basis.Xz,
 60450                basis.Yz,
 60451                basis.Zz,
 60452                basis.Denominator,
 60453                denominator,
 60454                localPoint,
 60455                localDisplacement,
 60456                out Fixed64 z);
 60457        if (!representable)
 58        {
 3259            point = default;
 3260            return false;
 61        }
 62
 57263        point = new Vector3d(x, y, z);
 57264        return true;
 65    }
 66
 67    internal static bool TryGetRelativeOffset(
 68        Vector3d firstOrigin,
 69        FixedQuaternion firstRotation,
 70        Vector3d firstLocalPoint,
 71        Vector3d firstLocalDisplacement,
 72        Vector3d secondOrigin,
 73        FixedQuaternion secondRotation,
 74        Vector3d secondLocalPoint,
 75        Vector3d secondLocalDisplacement,
 76        Fixed64 scale,
 77        out Vector3d offset)
 78    {
 139679        if (firstOrigin == secondOrigin
 139680            && firstRotation == secondRotation)
 81        {
 82            bool localRepresentable;
 83            Vector3d localOffset;
 104984            if (firstLocalDisplacement == Vector3d.Zero
 104985                && secondLocalDisplacement == Vector3d.Zero)
 86            {
 102887                localRepresentable = Vector3d.TrySubtract(
 102888                    firstLocalPoint,
 102889                    secondLocalPoint,
 102890                    out localOffset);
 91            }
 92            else
 93            {
 2194                localRepresentable = Vector3d.TrySubtractSums(
 2195                    firstLocalPoint,
 2196                    firstLocalDisplacement,
 2197                    secondLocalPoint,
 2198                    secondLocalDisplacement,
 2199                    out localOffset);
 100            }
 101
 1049102            if (localRepresentable)
 103            {
 1048104                if (firstRotation != FixedQuaternion.Identity)
 105                {
 3106                    if (scale == Fixed64.One)
 2107                        return firstRotation.TryRotate(localOffset, out offset);
 108                }
 109                else
 110                {
 1045111                    return TryScaleOffset(localOffset, scale, out offset);
 112                }
 113            }
 114        }
 115
 349116        if (firstRotation == FixedQuaternion.Identity
 349117            && secondRotation == FixedQuaternion.Identity)
 118        {
 68119            bool compactRepresentable = Vector3d.TryAddSubtract(
 68120                firstOrigin,
 68121                firstLocalPoint,
 68122                secondOrigin,
 68123                out Vector3d firstStep);
 68124            compactRepresentable &= Vector3d.TryAddSubtract(
 68125                firstStep,
 68126                firstLocalDisplacement,
 68127                secondLocalPoint,
 68128                out Vector3d secondStep);
 68129            compactRepresentable &= Vector3d.TrySubtract(
 68130                secondStep,
 68131                secondLocalDisplacement,
 68132                out Vector3d compactOffset);
 68133            if (compactRepresentable)
 55134                return TryScaleOffset(compactOffset, scale, out offset);
 135        }
 136
 294137        WideRationalBasis3d firstBasis = new(firstRotation);
 294138        WideRationalBasis3d secondBasis = new(secondRotation);
 294139        Signed320 denominator = WideArithmetic.MultiplySigned192(
 294140            firstBasis.Denominator,
 294141            secondBasis.Denominator);
 294142        Signed576 denominatorWide = Signed576.ExtendValue(denominator);
 294143        bool representable = TryGetRelativeOffsetCoordinate(
 294144            firstOrigin.X,
 294145            firstBasis.Xx,
 294146            firstBasis.Yx,
 294147            firstBasis.Zx,
 294148            firstBasis.Denominator,
 294149            firstLocalPoint,
 294150            firstLocalDisplacement,
 294151            secondOrigin.X,
 294152            secondBasis.Xx,
 294153            secondBasis.Yx,
 294154            secondBasis.Zx,
 294155            secondBasis.Denominator,
 294156            secondLocalPoint,
 294157            secondLocalDisplacement,
 294158            denominator,
 294159            denominatorWide,
 294160            scale,
 294161            out Fixed64 x)
 294162            & TryGetRelativeOffsetCoordinate(
 294163                firstOrigin.Y,
 294164                firstBasis.Xy,
 294165                firstBasis.Yy,
 294166                firstBasis.Zy,
 294167                firstBasis.Denominator,
 294168                firstLocalPoint,
 294169                firstLocalDisplacement,
 294170                secondOrigin.Y,
 294171                secondBasis.Xy,
 294172                secondBasis.Yy,
 294173                secondBasis.Zy,
 294174            secondBasis.Denominator,
 294175            secondLocalPoint,
 294176            secondLocalDisplacement,
 294177            denominator,
 294178            denominatorWide,
 294179            scale,
 294180            out Fixed64 y)
 294181            & TryGetRelativeOffsetCoordinate(
 294182                firstOrigin.Z,
 294183                firstBasis.Xz,
 294184                firstBasis.Yz,
 294185                firstBasis.Zz,
 294186                firstBasis.Denominator,
 294187                firstLocalPoint,
 294188                firstLocalDisplacement,
 294189                secondOrigin.Z,
 294190                secondBasis.Xz,
 294191                secondBasis.Yz,
 294192                secondBasis.Zz,
 294193            secondBasis.Denominator,
 294194            secondLocalPoint,
 294195            secondLocalDisplacement,
 294196            denominator,
 294197            denominatorWide,
 294198            scale,
 294199            out Fixed64 z);
 294200        if (!representable)
 201        {
 8202            offset = default;
 8203            return false;
 204        }
 205
 286206        offset = new Vector3d(x, y, z);
 286207        return true;
 208    }
 209
 210    private static bool TryScaleOffset(
 211        Vector3d value,
 212        Fixed64 scale,
 213        out Vector3d result)
 214    {
 1100215        if (scale == Fixed64.One)
 216        {
 1094217            result = value;
 1094218            return true;
 219        }
 220
 6221        bool representable = Fixed64.TryMultiplyDivide(
 6222                value.X,
 6223                scale,
 6224                Fixed64.One,
 6225                out Fixed64 x)
 6226            & Fixed64.TryMultiplyDivide(
 6227                value.Y,
 6228                scale,
 6229                Fixed64.One,
 6230                out Fixed64 y)
 6231            & Fixed64.TryMultiplyDivide(
 6232                value.Z,
 6233                scale,
 6234                Fixed64.One,
 6235                out Fixed64 z);
 6236        result = representable ? new Vector3d(x, y, z) : default;
 6237        return representable;
 238    }
 239
 240    internal static bool TryGetLocalPointIn(
 241        Vector3d pointOrigin,
 242        FixedQuaternion pointRotation,
 243        Vector3d pointLocalPoint,
 244        Vector3d pointLocalDisplacement,
 245        Vector3d frameOrigin,
 246        FixedQuaternion frameRotation,
 247        out Vector3d localPoint)
 248    {
 4475249        WideRationalBasis3d pointBasis = new(pointRotation);
 4475250        WideRationalBasis3d frameBasis = new(frameRotation);
 4475251        Signed320 denominator = WideArithmetic.MultiplySigned192(
 4475252            pointBasis.Denominator,
 4475253            frameBasis.Denominator);
 4475254        Signed576 denominatorWide = Signed576.ExtendValue(denominator);
 4475255        Signed192 originX = WideArithmetic.SubtractSigned192(
 4475256            Signed192.Raw(pointOrigin.X),
 4475257            Signed192.Raw(frameOrigin.X));
 4475258        Signed192 originY = WideArithmetic.SubtractSigned192(
 4475259            Signed192.Raw(pointOrigin.Y),
 4475260            Signed192.Raw(frameOrigin.Y));
 4475261        Signed192 originZ = WideArithmetic.SubtractSigned192(
 4475262            Signed192.Raw(pointOrigin.Z),
 4475263            Signed192.Raw(frameOrigin.Z));
 4475264        Signed320 rotatedX = WideArithmetic.GetDotProduct3D(
 4475265            Signed192.Raw(pointLocalPoint.X),
 4475266            Signed192.Raw(pointLocalPoint.Y),
 4475267            Signed192.Raw(pointLocalPoint.Z),
 4475268            pointBasis.Xx,
 4475269            pointBasis.Yx,
 4475270            pointBasis.Zx);
 4475271        rotatedX = WideArithmetic.AddSigned320(
 4475272            rotatedX,
 4475273            WideArithmetic.GetDotProduct3D(
 4475274                Signed192.Raw(pointLocalDisplacement.X),
 4475275                Signed192.Raw(pointLocalDisplacement.Y),
 4475276                Signed192.Raw(pointLocalDisplacement.Z),
 4475277                pointBasis.Xx,
 4475278                pointBasis.Yx,
 4475279                pointBasis.Zx));
 4475280        Signed320 rotatedY = WideArithmetic.GetDotProduct3D(
 4475281            Signed192.Raw(pointLocalPoint.X),
 4475282            Signed192.Raw(pointLocalPoint.Y),
 4475283            Signed192.Raw(pointLocalPoint.Z),
 4475284            pointBasis.Xy,
 4475285            pointBasis.Yy,
 4475286            pointBasis.Zy);
 4475287        rotatedY = WideArithmetic.AddSigned320(
 4475288            rotatedY,
 4475289            WideArithmetic.GetDotProduct3D(
 4475290                Signed192.Raw(pointLocalDisplacement.X),
 4475291                Signed192.Raw(pointLocalDisplacement.Y),
 4475292                Signed192.Raw(pointLocalDisplacement.Z),
 4475293                pointBasis.Xy,
 4475294                pointBasis.Yy,
 4475295                pointBasis.Zy));
 4475296        Signed320 rotatedZ = WideArithmetic.GetDotProduct3D(
 4475297            Signed192.Raw(pointLocalPoint.X),
 4475298            Signed192.Raw(pointLocalPoint.Y),
 4475299            Signed192.Raw(pointLocalPoint.Z),
 4475300            pointBasis.Xz,
 4475301            pointBasis.Yz,
 4475302            pointBasis.Zz);
 4475303        rotatedZ = WideArithmetic.AddSigned320(
 4475304            rotatedZ,
 4475305            WideArithmetic.GetDotProduct3D(
 4475306                Signed192.Raw(pointLocalDisplacement.X),
 4475307                Signed192.Raw(pointLocalDisplacement.Y),
 4475308                Signed192.Raw(pointLocalDisplacement.Z),
 4475309                pointBasis.Xz,
 4475310                pointBasis.Yz,
 4475311                pointBasis.Zz));
 312
 4475313        bool representable = TryGetLocalPointCoordinate(
 4475314            originX,
 4475315            originY,
 4475316            originZ,
 4475317            rotatedX,
 4475318            rotatedY,
 4475319            rotatedZ,
 4475320            pointBasis.Denominator,
 4475321            frameBasis.Xx,
 4475322            frameBasis.Xy,
 4475323            frameBasis.Xz,
 4475324            denominatorWide,
 4475325            out Fixed64 x)
 4475326            & TryGetLocalPointCoordinate(
 4475327                originX,
 4475328                originY,
 4475329                originZ,
 4475330                rotatedX,
 4475331                rotatedY,
 4475332                rotatedZ,
 4475333                pointBasis.Denominator,
 4475334                frameBasis.Yx,
 4475335                frameBasis.Yy,
 4475336                frameBasis.Yz,
 4475337                denominatorWide,
 4475338                out Fixed64 y)
 4475339            & TryGetLocalPointCoordinate(
 4475340                originX,
 4475341                originY,
 4475342                originZ,
 4475343                rotatedX,
 4475344                rotatedY,
 4475345                rotatedZ,
 4475346                pointBasis.Denominator,
 4475347                frameBasis.Zx,
 4475348                frameBasis.Zy,
 4475349                frameBasis.Zz,
 4475350                denominatorWide,
 4475351                out Fixed64 z);
 4475352        if (!representable)
 353        {
 15354            localPoint = default;
 15355            return false;
 356        }
 357
 4460358        localPoint = new Vector3d(x, y, z);
 4460359        return true;
 360    }
 361
 362    internal static bool TryGetProjectedOffset(
 363        Vector3d firstOrigin,
 364        FixedQuaternion firstRotation,
 365        Vector3d firstLocalPoint,
 366        Vector3d firstLocalDisplacement,
 367        Vector3d secondOrigin,
 368        FixedQuaternion secondRotation,
 369        Vector3d secondLocalPoint,
 370        Vector3d secondLocalDisplacement,
 371        Vector3d direction,
 372        out Fixed64 projection)
 373    {
 261374        GetProjectedOffsetRatio(
 261375            firstOrigin,
 261376            firstRotation,
 261377            firstLocalPoint,
 261378            firstLocalDisplacement,
 261379            secondOrigin,
 261380            secondRotation,
 261381            secondLocalPoint,
 261382            secondLocalDisplacement,
 261383            direction,
 261384            out Signed704 numerator,
 261385            out Signed704 denominator);
 261386        return Fixed64.TryGetSignedRawRatio(
 261387            numerator,
 261388            denominator,
 261389            out projection);
 390    }
 391
 392    internal static Fixed64 ProjectNonNegativeOffset(
 393        Vector3d firstOrigin,
 394        FixedQuaternion firstRotation,
 395        Vector3d firstLocalPoint,
 396        Vector3d firstLocalDisplacement,
 397        Vector3d secondOrigin,
 398        FixedQuaternion secondRotation,
 399        Vector3d secondLocalPoint,
 400        Vector3d secondLocalDisplacement,
 401        Vector3d direction)
 402    {
 259403        GetProjectedOffsetRatio(
 259404            firstOrigin,
 259405            firstRotation,
 259406            firstLocalPoint,
 259407            firstLocalDisplacement,
 259408            secondOrigin,
 259409            secondRotation,
 259410            secondLocalPoint,
 259411            secondLocalDisplacement,
 259412            direction,
 259413            out Signed704 numerator,
 259414            out Signed704 denominator);
 259415        return Fixed64.GetNonNegativeRawRatioFloor(
 259416            numerator,
 259417            denominator);
 418    }
 419
 420    internal static void GetProjectedOffsetRatio(
 421        in FixedPointAnchor first,
 422        in FixedPointAnchor second,
 423        Vector3d direction,
 424        out Signed704 numerator,
 425        out Signed704 denominator)
 426    {
 155427        if (!first.ExactLocalTerm.IsZero
 155428            || first.LocalTranslation != Vector3d.Zero)
 429        {
 78430            GetExactProjectedOffsetRatio(
 78431                first.Origin,
 78432                first.Rotation,
 78433                first.LocalPoint,
 78434                first.LocalDisplacement,
 78435                first.LocalTranslation,
 78436                first.ExactLocalTerm,
 78437                second.Origin,
 78438                second.Rotation,
 78439                second.LocalPoint,
 78440                second.LocalDisplacement,
 78441                second.LocalTranslation,
 78442                second.ExactLocalTerm,
 78443                direction,
 78444                out numerator,
 78445                out denominator);
 78446            return;
 447        }
 448
 77449        GetProjectedOffsetRatio(
 77450            first.Origin,
 77451            first.Rotation,
 77452            first.LocalPoint,
 77453            first.LocalDisplacement,
 77454            second.Origin,
 77455            second.Rotation,
 77456            second.LocalPoint,
 77457            second.LocalDisplacement,
 77458            direction,
 77459            out numerator,
 77460            out denominator);
 77461    }
 462
 463    private static void GetProjectedOffsetRatio(
 464        Vector3d firstOrigin,
 465        FixedQuaternion firstRotation,
 466        Vector3d firstLocalPoint,
 467        Vector3d firstLocalDisplacement,
 468        Vector3d secondOrigin,
 469        FixedQuaternion secondRotation,
 470        Vector3d secondLocalPoint,
 471        Vector3d secondLocalDisplacement,
 472        Vector3d direction,
 473        out Signed704 numerator,
 474        out Signed704 denominator)
 475    {
 597476        WideRationalBasis3d firstBasis = new(firstRotation);
 597477        WideRationalBasis3d secondBasis = new(secondRotation);
 597478        Signed320 coordinateDenominator =
 597479            WideArithmetic.MultiplySigned192(
 597480                firstBasis.Denominator,
 597481                secondBasis.Denominator);
 597482        Signed576 coordinateDenominatorWide =
 597483            Signed576.ExtendValue(coordinateDenominator);
 597484        Signed576 x = GetRelativeOffsetNumerator(
 597485            firstOrigin.X,
 597486            firstBasis.Xx,
 597487            firstBasis.Yx,
 597488            firstBasis.Zx,
 597489            firstBasis.Denominator,
 597490            firstLocalPoint,
 597491            firstLocalDisplacement,
 597492            secondOrigin.X,
 597493            secondBasis.Xx,
 597494            secondBasis.Yx,
 597495            secondBasis.Zx,
 597496            secondBasis.Denominator,
 597497            secondLocalPoint,
 597498            secondLocalDisplacement,
 597499            coordinateDenominator);
 597500        Signed576 y = GetRelativeOffsetNumerator(
 597501            firstOrigin.Y,
 597502            firstBasis.Xy,
 597503            firstBasis.Yy,
 597504            firstBasis.Zy,
 597505            firstBasis.Denominator,
 597506            firstLocalPoint,
 597507            firstLocalDisplacement,
 597508            secondOrigin.Y,
 597509            secondBasis.Xy,
 597510            secondBasis.Yy,
 597511            secondBasis.Zy,
 597512            secondBasis.Denominator,
 597513            secondLocalPoint,
 597514            secondLocalDisplacement,
 597515            coordinateDenominator);
 597516        Signed576 z = GetRelativeOffsetNumerator(
 597517            firstOrigin.Z,
 597518            firstBasis.Xz,
 597519            firstBasis.Yz,
 597520            firstBasis.Zz,
 597521            firstBasis.Denominator,
 597522            firstLocalPoint,
 597523            firstLocalDisplacement,
 597524            secondOrigin.Z,
 597525            secondBasis.Xz,
 597526            secondBasis.Yz,
 597527            secondBasis.Zz,
 597528            secondBasis.Denominator,
 597529            secondLocalPoint,
 597530            secondLocalDisplacement,
 597531            coordinateDenominator);
 597532        numerator = WideArithmetic.AddSigned704(
 597533            WideArithmetic.AddSigned704(
 597534                WideArithmetic.MultiplySigned576ToSigned704(
 597535                    x,
 597536                    Signed320.ExtendValue(Signed192.Raw(direction.X))),
 597537                WideArithmetic.MultiplySigned576ToSigned704(
 597538                    y,
 597539                    Signed320.ExtendValue(Signed192.Raw(direction.Y)))),
 597540            WideArithmetic.MultiplySigned576ToSigned704(
 597541                z,
 597542                Signed320.ExtendValue(Signed192.Raw(direction.Z))));
 597543        denominator = WideArithmetic.MultiplySigned576ToSigned704(
 597544            coordinateDenominatorWide,
 597545            Signed320.ExtendValue(Signed192.One));
 597546    }
 547
 548    private static bool TryGetPointCoordinate(
 549        Fixed64 origin,
 550        Signed192 axisX,
 551        Signed192 axisY,
 552        Signed192 axisZ,
 553        Signed192 denominator,
 554        Signed576 denominatorWide,
 555        Vector3d localPoint,
 556        Vector3d localDisplacement,
 557        out Fixed64 coordinate)
 558    {
 1812559        Signed320 numerator = WideArithmetic.AddSigned320(
 1812560            WideArithmetic.MultiplySigned192(Signed192.Raw(origin), denominator),
 1812561            WideArithmetic.AddSigned320(
 1812562                WideArithmetic.GetDotProduct3D(
 1812563                    Signed192.Raw(localPoint.X),
 1812564                    Signed192.Raw(localPoint.Y),
 1812565                    Signed192.Raw(localPoint.Z),
 1812566                    axisX,
 1812567                    axisY,
 1812568                    axisZ),
 1812569                WideArithmetic.GetDotProduct3D(
 1812570                    Signed192.Raw(localDisplacement.X),
 1812571                    Signed192.Raw(localDisplacement.Y),
 1812572                    Signed192.Raw(localDisplacement.Z),
 1812573                    axisX,
 1812574                    axisY,
 1812575                    axisZ)));
 1812576        return Fixed64.TryGetSignedRawRatio(
 1812577            Signed576.ExtendValue(numerator),
 1812578            denominatorWide,
 1812579            out coordinate);
 580    }
 581
 582    private static bool TryGetRelativeOffsetCoordinate(
 583        Fixed64 firstOrigin,
 584        Signed192 firstAxisX,
 585        Signed192 firstAxisY,
 586        Signed192 firstAxisZ,
 587        Signed192 firstDenominator,
 588        Vector3d firstLocalPoint,
 589        Vector3d firstLocalDisplacement,
 590        Fixed64 secondOrigin,
 591        Signed192 secondAxisX,
 592        Signed192 secondAxisY,
 593        Signed192 secondAxisZ,
 594        Signed192 secondDenominator,
 595        Vector3d secondLocalPoint,
 596        Vector3d secondLocalDisplacement,
 597        Signed320 denominator,
 598        Signed576 denominatorWide,
 599        Fixed64 scale,
 600        out Fixed64 coordinate)
 601    {
 882602        Signed576 numerator = GetRelativeOffsetNumerator(
 882603            firstOrigin,
 882604            firstAxisX,
 882605            firstAxisY,
 882606            firstAxisZ,
 882607            firstDenominator,
 882608            firstLocalPoint,
 882609            firstLocalDisplacement,
 882610            secondOrigin,
 882611            secondAxisX,
 882612            secondAxisY,
 882613            secondAxisZ,
 882614            secondDenominator,
 882615            secondLocalPoint,
 882616            secondLocalDisplacement,
 882617            denominator);
 882618        if (scale == Fixed64.One)
 619        {
 105620            return Fixed64.TryGetSignedRawRatio(
 105621                numerator,
 105622                denominatorWide,
 105623                out coordinate);
 624        }
 777625        Signed320 scaleRaw = Signed320.ExtendValue(Signed192.Raw(scale));
 777626        Signed320 oneRaw = Signed320.ExtendValue(Signed192.One);
 777627        return Fixed64.TryGetSignedRawRatio(
 777628            WideArithmetic.MultiplySigned576ToSigned704(
 777629                numerator,
 777630                scaleRaw),
 777631            WideArithmetic.MultiplySigned576ToSigned704(
 777632                denominatorWide,
 777633                oneRaw),
 777634            out coordinate);
 635    }
 636
 637    private static Signed576 GetRelativeOffsetNumerator(
 638        Fixed64 firstOrigin,
 639        Signed192 firstAxisX,
 640        Signed192 firstAxisY,
 641        Signed192 firstAxisZ,
 642        Signed192 firstDenominator,
 643        Vector3d firstLocalPoint,
 644        Vector3d firstLocalDisplacement,
 645        Fixed64 secondOrigin,
 646        Signed192 secondAxisX,
 647        Signed192 secondAxisY,
 648        Signed192 secondAxisZ,
 649        Signed192 secondDenominator,
 650        Vector3d secondLocalPoint,
 651        Vector3d secondLocalDisplacement,
 652        Signed320 denominator)
 653    {
 3663654        Signed320 firstRotated = WideArithmetic.GetDotProduct3D(
 3663655            Signed192.Raw(firstLocalPoint.X),
 3663656            Signed192.Raw(firstLocalPoint.Y),
 3663657            Signed192.Raw(firstLocalPoint.Z),
 3663658            firstAxisX,
 3663659            firstAxisY,
 3663660            firstAxisZ);
 3663661        firstRotated = WideArithmetic.AddSigned320(
 3663662            firstRotated,
 3663663            WideArithmetic.GetDotProduct3D(
 3663664                Signed192.Raw(firstLocalDisplacement.X),
 3663665                Signed192.Raw(firstLocalDisplacement.Y),
 3663666                Signed192.Raw(firstLocalDisplacement.Z),
 3663667                firstAxisX,
 3663668                firstAxisY,
 3663669                firstAxisZ));
 3663670        Signed320 secondRotated = WideArithmetic.GetDotProduct3D(
 3663671            Signed192.Raw(secondLocalPoint.X),
 3663672            Signed192.Raw(secondLocalPoint.Y),
 3663673            Signed192.Raw(secondLocalPoint.Z),
 3663674            secondAxisX,
 3663675            secondAxisY,
 3663676            secondAxisZ);
 3663677        secondRotated = WideArithmetic.AddSigned320(
 3663678            secondRotated,
 3663679            WideArithmetic.GetDotProduct3D(
 3663680                Signed192.Raw(secondLocalDisplacement.X),
 3663681                Signed192.Raw(secondLocalDisplacement.Y),
 3663682                Signed192.Raw(secondLocalDisplacement.Z),
 3663683                secondAxisX,
 3663684                secondAxisY,
 3663685                secondAxisZ));
 3663686        return WideArithmetic.SubtractSigned576(
 3663687            WideArithmetic.AddSigned576(
 3663688                WideArithmetic.MultiplySigned320(
 3663689                    Signed320.ExtendValue(
 3663690                        WideArithmetic.SubtractSigned192(
 3663691                            Signed192.Raw(firstOrigin),
 3663692                            Signed192.Raw(secondOrigin))),
 3663693                    denominator),
 3663694                WideArithmetic.MultiplySigned320(
 3663695                    firstRotated,
 3663696                    Signed320.ExtendValue(secondDenominator))),
 3663697            WideArithmetic.MultiplySigned320(
 3663698                secondRotated,
 3663699                Signed320.ExtendValue(firstDenominator)));
 700    }
 701
 702    private static bool TryGetLocalPointCoordinate(
 703        Signed192 originX,
 704        Signed192 originY,
 705        Signed192 originZ,
 706        Signed320 rotatedX,
 707        Signed320 rotatedY,
 708        Signed320 rotatedZ,
 709        Signed192 pointDenominator,
 710        Signed192 frameAxisX,
 711        Signed192 frameAxisY,
 712        Signed192 frameAxisZ,
 713        Signed576 denominator,
 714        out Fixed64 coordinate)
 715    {
 13425716        Signed320 originProjection = WideArithmetic.GetDotProduct3D(
 13425717            originX,
 13425718            originY,
 13425719            originZ,
 13425720            frameAxisX,
 13425721            frameAxisY,
 13425722            frameAxisZ);
 13425723        Signed576 rotatedProjection = WideArithmetic.AddSigned576(
 13425724            WideArithmetic.AddSigned576(
 13425725                WideArithmetic.MultiplySigned320(
 13425726                    rotatedX,
 13425727                    Signed320.ExtendValue(frameAxisX)),
 13425728                WideArithmetic.MultiplySigned320(
 13425729                    rotatedY,
 13425730                    Signed320.ExtendValue(frameAxisY))),
 13425731            WideArithmetic.MultiplySigned320(
 13425732                rotatedZ,
 13425733                Signed320.ExtendValue(frameAxisZ)));
 13425734        Signed576 numerator = WideArithmetic.AddSigned576(
 13425735            WideArithmetic.MultiplySigned320(
 13425736                originProjection,
 13425737                Signed320.ExtendValue(pointDenominator)),
 13425738            rotatedProjection);
 13425739        return Fixed64.TryGetSignedRawRatio(
 13425740            numerator,
 13425741            denominator,
 13425742            out coordinate);
 743    }
 744}

/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    {
 17644        if (!reference.ExactLocalTerm.IsZero
 17645            || !first.ExactLocalTerm.IsZero
 17646            || !second.ExactLocalTerm.IsZero
 17647            || reference.LocalTranslation != Vector3d.Zero
 17648            || first.LocalTranslation != Vector3d.Zero
 17649            || second.LocalTranslation != Vector3d.Zero)
 50        {
 1151            return CompareExactSquaredDistances(
 1152                reference,
 1153                first,
 1154                second);
 55        }
 56
 16557        GetSquaredOffsetRatio(
 16558            first,
 16559            reference,
 16560            out Signed832 firstNumerator,
 16561            out Signed576 firstDenominator);
 16562        GetSquaredOffsetRatio(
 16563            second,
 16564            reference,
 16565            out Signed832 secondNumerator,
 16566            out Signed576 secondDenominator);
 16567        return WideArithmetic.CompareNonNegativeSquaredRatios(
 16568            firstNumerator,
 16569            firstDenominator,
 16570            secondNumerator,
 16571            secondDenominator);
 72    }
 73
 74    private static int CompareExactSquaredDistances(
 75        in FixedPointAnchor reference,
 76        in FixedPointAnchor first,
 77        in FixedPointAnchor second)
 78    {
 1179        GetExactSquaredOffsetRatio(
 1180            first,
 1181            reference,
 1182            out Signed832 firstNumerator,
 1183            out Signed576 firstDenominator);
 1184        GetExactSquaredOffsetRatio(
 1185            second,
 1186            reference,
 1187            out Signed832 secondNumerator,
 1188            out Signed576 secondDenominator);
 1189        return WideArithmetic.CompareNonNegativeSquaredRatios(
 1190            firstNumerator,
 1191            firstDenominator,
 1192            secondNumerator,
 1193            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    {
 22102        GetExactRelativeOffsetRatio(
 22103            first.Origin,
 22104            first.Rotation,
 22105            first.LocalPoint,
 22106            first.LocalDisplacement,
 22107            first.LocalTranslation,
 22108            first.ExactLocalTerm,
 22109            second.Origin,
 22110            second.Rotation,
 22111            second.LocalPoint,
 22112            second.LocalDisplacement,
 22113            second.LocalTranslation,
 22114            second.ExactLocalTerm,
 22115            out Signed576 x,
 22116            out Signed576 y,
 22117            out Signed576 z,
 22118            out denominator);
 22119        squaredNumerator = WideArithmetic.AddSigned832(
 22120            WideArithmetic.AddSigned832(
 22121                WideArithmetic.MultiplySigned576ToSigned832(x, x),
 22122                WideArithmetic.MultiplySigned576ToSigned832(y, y)),
 22123            WideArithmetic.MultiplySigned576ToSigned832(z, z));
 22124    }
 125
 126    private static void GetSquaredOffsetRatio(
 127        in FixedPointAnchor first,
 128        in FixedPointAnchor second,
 129        out Signed832 squaredNumerator,
 130        out Signed576 denominator)
 131    {
 330132        WideRationalBasis3d firstBasis = new(first.Rotation);
 330133        WideRationalBasis3d secondBasis = new(second.Rotation);
 330134        Signed320 coordinateDenominator =
 330135            WideArithmetic.MultiplySigned192(
 330136                firstBasis.Denominator,
 330137                secondBasis.Denominator);
 330138        Signed576 x = GetRelativeOffsetNumerator(
 330139            first.Origin.X,
 330140            firstBasis.Xx,
 330141            firstBasis.Yx,
 330142            firstBasis.Zx,
 330143            firstBasis.Denominator,
 330144            first.LocalPoint,
 330145            first.LocalDisplacement,
 330146            second.Origin.X,
 330147            secondBasis.Xx,
 330148            secondBasis.Yx,
 330149            secondBasis.Zx,
 330150            secondBasis.Denominator,
 330151            second.LocalPoint,
 330152            second.LocalDisplacement,
 330153            coordinateDenominator);
 330154        Signed576 y = GetRelativeOffsetNumerator(
 330155            first.Origin.Y,
 330156            firstBasis.Xy,
 330157            firstBasis.Yy,
 330158            firstBasis.Zy,
 330159            firstBasis.Denominator,
 330160            first.LocalPoint,
 330161            first.LocalDisplacement,
 330162            second.Origin.Y,
 330163            secondBasis.Xy,
 330164            secondBasis.Yy,
 330165            secondBasis.Zy,
 330166            secondBasis.Denominator,
 330167            second.LocalPoint,
 330168            second.LocalDisplacement,
 330169            coordinateDenominator);
 330170        Signed576 z = GetRelativeOffsetNumerator(
 330171            first.Origin.Z,
 330172            firstBasis.Xz,
 330173            firstBasis.Yz,
 330174            firstBasis.Zz,
 330175            firstBasis.Denominator,
 330176            first.LocalPoint,
 330177            first.LocalDisplacement,
 330178            second.Origin.Z,
 330179            secondBasis.Xz,
 330180            secondBasis.Yz,
 330181            secondBasis.Zz,
 330182            secondBasis.Denominator,
 330183            second.LocalPoint,
 330184            second.LocalDisplacement,
 330185            coordinateDenominator);
 330186        squaredNumerator = WideArithmetic.AddSigned832(
 330187            WideArithmetic.AddSigned832(
 330188                WideArithmetic.MultiplySigned576ToSigned832(x, x),
 330189                WideArithmetic.MultiplySigned576ToSigned832(y, y)),
 330190            WideArithmetic.MultiplySigned576ToSigned832(z, z));
 330191        denominator = Signed576.ExtendValue(
 330192            coordinateDenominator);
 330193    }
 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
 8namespace FixedMathSharp.Geometry;
 9
 10/// <content>
 11/// Exact three-dimensional point-anchor term operations.
 12/// </content>
 13internal static partial class WidePointAnchor3d
 14{
 15    internal static bool TryGetPoint(
 16        Vector3d origin,
 17        FixedQuaternion rotation,
 18        Vector3d localPoint,
 19        Vector3d localDisplacement,
 20        Vector3d localTranslation,
 21        FixedPointAnchorTerm3d exactLocalTerm,
 22        out Vector3d point)
 23    {
 61724        if (exactLocalTerm.IsZero
 61725            && localTranslation == Vector3d.Zero)
 26        {
 60427            return TryGetPoint(
 60428                origin,
 60429                rotation,
 60430                localPoint,
 60431                localDisplacement,
 60432                out point);
 33        }
 34
 1335        WideRationalBasis3d basis = new(rotation);
 1336        Signed320 denominator = GetAnchorDenominator(basis);
 1337        Signed576 denominatorWide =
 1338            Signed576.ExtendValue(denominator);
 1339        bool representable = Fixed64.TryGetSignedRawRatio(
 1340                Signed576.ExtendValue(
 1341                    GetAnchorCoordinateNumerator(
 1342                        origin.X,
 1343                        basis.Xx,
 1344                        basis.Yx,
 1345                        basis.Zx,
 1346                        basis,
 1347                        localPoint,
 1348                        localDisplacement,
 1349                        localTranslation,
 1350                        exactLocalTerm)),
 1351                denominatorWide,
 1352                out Fixed64 x)
 1353            & Fixed64.TryGetSignedRawRatio(
 1354                Signed576.ExtendValue(
 1355                    GetAnchorCoordinateNumerator(
 1356                        origin.Y,
 1357                        basis.Xy,
 1358                        basis.Yy,
 1359                        basis.Zy,
 1360                        basis,
 1361                        localPoint,
 1362                        localDisplacement,
 1363                        localTranslation,
 1364                        exactLocalTerm)),
 1365                denominatorWide,
 1366                out Fixed64 y)
 1367            & Fixed64.TryGetSignedRawRatio(
 1368                Signed576.ExtendValue(
 1369                    GetAnchorCoordinateNumerator(
 1370                        origin.Z,
 1371                        basis.Xz,
 1372                        basis.Yz,
 1373                        basis.Zz,
 1374                        basis,
 1375                        localPoint,
 1376                        localDisplacement,
 1377                        localTranslation,
 1378                        exactLocalTerm)),
 1379                denominatorWide,
 1380                out Fixed64 z);
 1381        point = representable ? new Vector3d(x, y, z) : default;
 1382        return representable;
 83    }
 84
 85    internal static bool TryGetRelativeOffset(
 86        Vector3d firstOrigin,
 87        FixedQuaternion firstRotation,
 88        Vector3d firstLocalPoint,
 89        Vector3d firstLocalDisplacement,
 90        Vector3d firstLocalTranslation,
 91        FixedPointAnchorTerm3d firstExactLocalTerm,
 92        Vector3d secondOrigin,
 93        FixedQuaternion secondRotation,
 94        Vector3d secondLocalPoint,
 95        Vector3d secondLocalDisplacement,
 96        Vector3d secondLocalTranslation,
 97        FixedPointAnchorTerm3d secondExactLocalTerm,
 98        Fixed64 scale,
 99        out Vector3d offset)
 100    {
 1420101        if (firstExactLocalTerm.IsZero
 1420102            && secondExactLocalTerm.IsZero
 1420103            && firstLocalTranslation == Vector3d.Zero
 1420104            && secondLocalTranslation == Vector3d.Zero)
 105        {
 1396106            return TryGetRelativeOffset(
 1396107                firstOrigin,
 1396108                firstRotation,
 1396109                firstLocalPoint,
 1396110                firstLocalDisplacement,
 1396111                secondOrigin,
 1396112                secondRotation,
 1396113                secondLocalPoint,
 1396114                secondLocalDisplacement,
 1396115                scale,
 1396116                out offset);
 117        }
 118
 24119        GetExactRelativeOffsetRatio(
 24120            firstOrigin,
 24121            firstRotation,
 24122            firstLocalPoint,
 24123            firstLocalDisplacement,
 24124            firstLocalTranslation,
 24125            firstExactLocalTerm,
 24126            secondOrigin,
 24127            secondRotation,
 24128            secondLocalPoint,
 24129            secondLocalDisplacement,
 24130            secondLocalTranslation,
 24131            secondExactLocalTerm,
 24132            out Signed576 xNumerator,
 24133            out Signed576 yNumerator,
 24134            out Signed576 zNumerator,
 24135            out Signed576 denominator);
 24136        bool representable = TryGetScaledExactCoordinate(
 24137                xNumerator,
 24138                denominator,
 24139                scale,
 24140                out Fixed64 x)
 24141            & TryGetScaledExactCoordinate(
 24142                yNumerator,
 24143                denominator,
 24144                scale,
 24145                out Fixed64 y)
 24146            & TryGetScaledExactCoordinate(
 24147                zNumerator,
 24148                denominator,
 24149                scale,
 24150                out Fixed64 z);
 24151        offset = representable ? new Vector3d(x, y, z) : default;
 24152        return representable;
 153    }
 154
 155    internal static bool RepresentsSamePoint(
 156        in FixedPointAnchor first,
 157        in FixedPointAnchor second)
 158    {
 3159        GetExactRelativeOffsetRatio(
 3160            first.Origin,
 3161            first.Rotation,
 3162            first.LocalPoint,
 3163            first.LocalDisplacement,
 3164            first.LocalTranslation,
 3165            first.ExactLocalTerm,
 3166            second.Origin,
 3167            second.Rotation,
 3168            second.LocalPoint,
 3169            second.LocalDisplacement,
 3170            second.LocalTranslation,
 3171            second.ExactLocalTerm,
 3172            out Signed576 x,
 3173            out Signed576 y,
 3174            out Signed576 z,
 3175            out _);
 3176        return x.IsZero && y.IsZero && z.IsZero;
 177    }
 178
 179    internal static bool TryGetLocalPointIn(
 180        Vector3d pointOrigin,
 181        FixedQuaternion pointRotation,
 182        Vector3d pointLocalPoint,
 183        Vector3d pointLocalDisplacement,
 184        Vector3d pointLocalTranslation,
 185        FixedPointAnchorTerm3d exactLocalTerm,
 186        Vector3d frameOrigin,
 187        FixedQuaternion frameRotation,
 188        out Vector3d localPoint)
 189    {
 4539190        if (exactLocalTerm.IsZero
 4539191            && pointLocalTranslation == Vector3d.Zero)
 192        {
 4475193            return TryGetLocalPointIn(
 4475194                pointOrigin,
 4475195                pointRotation,
 4475196                pointLocalPoint,
 4475197                pointLocalDisplacement,
 4475198                frameOrigin,
 4475199                frameRotation,
 4475200                out localPoint);
 201        }
 202
 64203        WideRationalBasis3d pointBasis = new(pointRotation);
 64204        WideRationalBasis3d frameBasis = new(frameRotation);
 64205        Signed320 pointDenominator = GetAnchorDenominator(pointBasis);
 64206        Signed320 deltaX = GetAnchorDeltaNumerator(
 64207            pointOrigin.X,
 64208            frameOrigin.X,
 64209            pointBasis.Xx,
 64210            pointBasis.Yx,
 64211            pointBasis.Zx,
 64212            pointBasis,
 64213            pointLocalPoint,
 64214            pointLocalDisplacement,
 64215            pointLocalTranslation,
 64216            exactLocalTerm,
 64217            pointDenominator);
 64218        Signed320 deltaY = GetAnchorDeltaNumerator(
 64219            pointOrigin.Y,
 64220            frameOrigin.Y,
 64221            pointBasis.Xy,
 64222            pointBasis.Yy,
 64223            pointBasis.Zy,
 64224            pointBasis,
 64225            pointLocalPoint,
 64226            pointLocalDisplacement,
 64227            pointLocalTranslation,
 64228            exactLocalTerm,
 64229            pointDenominator);
 64230        Signed320 deltaZ = GetAnchorDeltaNumerator(
 64231            pointOrigin.Z,
 64232            frameOrigin.Z,
 64233            pointBasis.Xz,
 64234            pointBasis.Yz,
 64235            pointBasis.Zz,
 64236            pointBasis,
 64237            pointLocalPoint,
 64238            pointLocalDisplacement,
 64239            pointLocalTranslation,
 64240            exactLocalTerm,
 64241            pointDenominator);
 64242        Signed576 denominator = WideArithmetic.MultiplySigned320(
 64243            pointDenominator,
 64244            Signed320.ExtendValue(frameBasis.Denominator));
 64245        bool representable = Fixed64.TryGetSignedRawRatio(
 64246                GetWideProjection(
 64247                    deltaX,
 64248                    deltaY,
 64249                    deltaZ,
 64250                    frameBasis.Xx,
 64251                    frameBasis.Xy,
 64252                    frameBasis.Xz),
 64253                denominator,
 64254                out Fixed64 x)
 64255            & Fixed64.TryGetSignedRawRatio(
 64256                GetWideProjection(
 64257                    deltaX,
 64258                    deltaY,
 64259                    deltaZ,
 64260                    frameBasis.Yx,
 64261                    frameBasis.Yy,
 64262                    frameBasis.Yz),
 64263                denominator,
 64264                out Fixed64 y)
 64265            & Fixed64.TryGetSignedRawRatio(
 64266                GetWideProjection(
 64267                    deltaX,
 64268                    deltaY,
 64269                    deltaZ,
 64270                    frameBasis.Zx,
 64271                    frameBasis.Zy,
 64272                    frameBasis.Zz),
 64273                denominator,
 64274                out Fixed64 z);
 64275        localPoint = representable ? new Vector3d(x, y, z) : default;
 64276        return representable;
 277    }
 278
 279    internal static bool TryGetProjectedOffset(
 280        Vector3d firstOrigin,
 281        FixedQuaternion firstRotation,
 282        Vector3d firstLocalPoint,
 283        Vector3d firstLocalDisplacement,
 284        Vector3d firstLocalTranslation,
 285        FixedPointAnchorTerm3d firstExactLocalTerm,
 286        Vector3d secondOrigin,
 287        FixedQuaternion secondRotation,
 288        Vector3d secondLocalPoint,
 289        Vector3d secondLocalDisplacement,
 290        Vector3d secondLocalTranslation,
 291        FixedPointAnchorTerm3d secondExactLocalTerm,
 292        Vector3d direction,
 293        out Fixed64 projection)
 294    {
 277295        if (firstExactLocalTerm.IsZero
 277296            && secondExactLocalTerm.IsZero
 277297            && firstLocalTranslation == Vector3d.Zero
 277298            && secondLocalTranslation == Vector3d.Zero)
 299        {
 261300            return TryGetProjectedOffset(
 261301                firstOrigin,
 261302                firstRotation,
 261303                firstLocalPoint,
 261304                firstLocalDisplacement,
 261305                secondOrigin,
 261306                secondRotation,
 261307                secondLocalPoint,
 261308                secondLocalDisplacement,
 261309                direction,
 261310                out projection);
 311        }
 312
 16313        GetExactProjectedOffsetRatio(
 16314            firstOrigin,
 16315            firstRotation,
 16316            firstLocalPoint,
 16317            firstLocalDisplacement,
 16318            firstLocalTranslation,
 16319            firstExactLocalTerm,
 16320            secondOrigin,
 16321            secondRotation,
 16322            secondLocalPoint,
 16323            secondLocalDisplacement,
 16324            secondLocalTranslation,
 16325            secondExactLocalTerm,
 16326            direction,
 16327            out Signed704 numerator,
 16328            out Signed704 denominator);
 16329        return Fixed64.TryGetSignedRawRatio(
 16330            numerator,
 16331            denominator,
 16332            out projection);
 333    }
 334
 335    internal static Fixed64 ProjectNonNegativeOffset(
 336        Vector3d firstOrigin,
 337        FixedQuaternion firstRotation,
 338        Vector3d firstLocalPoint,
 339        Vector3d firstLocalDisplacement,
 340        Vector3d firstLocalTranslation,
 341        FixedPointAnchorTerm3d firstExactLocalTerm,
 342        Vector3d secondOrigin,
 343        FixedQuaternion secondRotation,
 344        Vector3d secondLocalPoint,
 345        Vector3d secondLocalDisplacement,
 346        Vector3d secondLocalTranslation,
 347        FixedPointAnchorTerm3d secondExactLocalTerm,
 348        Vector3d direction)
 349    {
 262350        if (firstExactLocalTerm.IsZero
 262351            && secondExactLocalTerm.IsZero
 262352            && firstLocalTranslation == Vector3d.Zero
 262353            && secondLocalTranslation == Vector3d.Zero)
 354        {
 259355            return ProjectNonNegativeOffset(
 259356                firstOrigin,
 259357                firstRotation,
 259358                firstLocalPoint,
 259359                firstLocalDisplacement,
 259360                secondOrigin,
 259361                secondRotation,
 259362                secondLocalPoint,
 259363                secondLocalDisplacement,
 259364                direction);
 365        }
 366
 3367        GetExactProjectedOffsetRatio(
 3368            firstOrigin,
 3369            firstRotation,
 3370            firstLocalPoint,
 3371            firstLocalDisplacement,
 3372            firstLocalTranslation,
 3373            firstExactLocalTerm,
 3374            secondOrigin,
 3375            secondRotation,
 3376            secondLocalPoint,
 3377            secondLocalDisplacement,
 3378            secondLocalTranslation,
 3379            secondExactLocalTerm,
 3380            direction,
 3381            out Signed704 numerator,
 3382            out Signed704 denominator);
 3383        return Fixed64.GetNonNegativeRawRatioFloor(
 3384            numerator,
 3385            denominator);
 386    }
 387
 388    private static void GetExactProjectedOffsetRatio(
 389        Vector3d firstOrigin,
 390        FixedQuaternion firstRotation,
 391        Vector3d firstLocalPoint,
 392        Vector3d firstLocalDisplacement,
 393        Vector3d firstLocalTranslation,
 394        FixedPointAnchorTerm3d firstExactLocalTerm,
 395        Vector3d secondOrigin,
 396        FixedQuaternion secondRotation,
 397        Vector3d secondLocalPoint,
 398        Vector3d secondLocalDisplacement,
 399        Vector3d secondLocalTranslation,
 400        FixedPointAnchorTerm3d secondExactLocalTerm,
 401        Vector3d direction,
 402        out Signed704 numerator,
 403        out Signed704 denominator)
 404    {
 97405        GetExactRelativeOffsetRatio(
 97406            firstOrigin,
 97407            firstRotation,
 97408            firstLocalPoint,
 97409            firstLocalDisplacement,
 97410            firstLocalTranslation,
 97411            firstExactLocalTerm,
 97412            secondOrigin,
 97413            secondRotation,
 97414            secondLocalPoint,
 97415            secondLocalDisplacement,
 97416            secondLocalTranslation,
 97417            secondExactLocalTerm,
 97418            out Signed576 x,
 97419            out Signed576 y,
 97420            out Signed576 z,
 97421            out Signed576 coordinateDenominator);
 97422        numerator = WideArithmetic.AddSigned704(
 97423            WideArithmetic.AddSigned704(
 97424                WideArithmetic.MultiplySigned576ToSigned704(
 97425                    x,
 97426                    Signed320.ExtendValue(Signed192.Raw(direction.X))),
 97427                WideArithmetic.MultiplySigned576ToSigned704(
 97428                    y,
 97429                    Signed320.ExtendValue(Signed192.Raw(direction.Y)))),
 97430            WideArithmetic.MultiplySigned576ToSigned704(
 97431                z,
 97432                Signed320.ExtendValue(Signed192.Raw(direction.Z))));
 97433        denominator = WideArithmetic.MultiplySigned576ToSigned704(
 97434            coordinateDenominator,
 97435            Signed320.ExtendValue(Signed192.One));
 97436    }
 437
 438    internal static void GetExactRelativeOffsetRatio(
 439        Vector3d firstOrigin,
 440        FixedQuaternion firstRotation,
 441        Vector3d firstLocalPoint,
 442        Vector3d firstLocalDisplacement,
 443        Vector3d firstLocalTranslation,
 444        FixedPointAnchorTerm3d firstExactLocalTerm,
 445        Vector3d secondOrigin,
 446        FixedQuaternion secondRotation,
 447        Vector3d secondLocalPoint,
 448        Vector3d secondLocalDisplacement,
 449        Vector3d secondLocalTranslation,
 450        FixedPointAnchorTerm3d secondExactLocalTerm,
 451        out Signed576 x,
 452        out Signed576 y,
 453        out Signed576 z,
 454        out Signed576 denominator)
 455    {
 153456        WideRationalBasis3d firstBasis = new(firstRotation);
 153457        WideRationalBasis3d secondBasis = new(secondRotation);
 153458        Signed320 firstDenominator = GetAnchorDenominator(firstBasis);
 153459        Signed320 secondDenominator = GetAnchorDenominator(secondBasis);
 153460        denominator = WideArithmetic.MultiplySigned320(
 153461            firstDenominator,
 153462            secondDenominator);
 153463        x = GetExactRelativeOffsetNumerator(
 153464            firstOrigin.X,
 153465            firstBasis.Xx,
 153466            firstBasis.Yx,
 153467            firstBasis.Zx,
 153468            firstBasis,
 153469            firstLocalPoint,
 153470            firstLocalDisplacement,
 153471            firstLocalTranslation,
 153472            firstExactLocalTerm,
 153473            firstDenominator,
 153474            secondOrigin.X,
 153475            secondBasis.Xx,
 153476            secondBasis.Yx,
 153477            secondBasis.Zx,
 153478            secondBasis,
 153479            secondLocalPoint,
 153480            secondLocalDisplacement,
 153481            secondLocalTranslation,
 153482            secondExactLocalTerm,
 153483            secondDenominator);
 153484        y = GetExactRelativeOffsetNumerator(
 153485            firstOrigin.Y,
 153486            firstBasis.Xy,
 153487            firstBasis.Yy,
 153488            firstBasis.Zy,
 153489            firstBasis,
 153490            firstLocalPoint,
 153491            firstLocalDisplacement,
 153492            firstLocalTranslation,
 153493            firstExactLocalTerm,
 153494            firstDenominator,
 153495            secondOrigin.Y,
 153496            secondBasis.Xy,
 153497            secondBasis.Yy,
 153498            secondBasis.Zy,
 153499            secondBasis,
 153500            secondLocalPoint,
 153501            secondLocalDisplacement,
 153502            secondLocalTranslation,
 153503            secondExactLocalTerm,
 153504            secondDenominator);
 153505        z = GetExactRelativeOffsetNumerator(
 153506            firstOrigin.Z,
 153507            firstBasis.Xz,
 153508            firstBasis.Yz,
 153509            firstBasis.Zz,
 153510            firstBasis,
 153511            firstLocalPoint,
 153512            firstLocalDisplacement,
 153513            firstLocalTranslation,
 153514            firstExactLocalTerm,
 153515            firstDenominator,
 153516            secondOrigin.Z,
 153517            secondBasis.Xz,
 153518            secondBasis.Yz,
 153519            secondBasis.Zz,
 153520            secondBasis,
 153521            secondLocalPoint,
 153522            secondLocalDisplacement,
 153523            secondLocalTranslation,
 153524            secondExactLocalTerm,
 153525            secondDenominator);
 153526    }
 527
 528    private static Signed576 GetExactRelativeOffsetNumerator(
 529        Fixed64 firstOrigin,
 530        Signed192 firstAxisX,
 531        Signed192 firstAxisY,
 532        Signed192 firstAxisZ,
 533        WideRationalBasis3d firstBasis,
 534        Vector3d firstLocalPoint,
 535        Vector3d firstLocalDisplacement,
 536        Vector3d firstLocalTranslation,
 537        FixedPointAnchorTerm3d firstExactLocalTerm,
 538        Signed320 firstDenominator,
 539        Fixed64 secondOrigin,
 540        Signed192 secondAxisX,
 541        Signed192 secondAxisY,
 542        Signed192 secondAxisZ,
 543        WideRationalBasis3d secondBasis,
 544        Vector3d secondLocalPoint,
 545        Vector3d secondLocalDisplacement,
 546        Vector3d secondLocalTranslation,
 547        FixedPointAnchorTerm3d secondExactLocalTerm,
 548        Signed320 secondDenominator) =>
 459549        WideArithmetic.SubtractSigned576(
 459550            WideArithmetic.MultiplySigned320(
 459551                GetAnchorCoordinateNumerator(
 459552                    firstOrigin,
 459553                    firstAxisX,
 459554                    firstAxisY,
 459555                    firstAxisZ,
 459556                    firstBasis,
 459557                    firstLocalPoint,
 459558                    firstLocalDisplacement,
 459559                    firstLocalTranslation,
 459560                    firstExactLocalTerm),
 459561                secondDenominator),
 459562            WideArithmetic.MultiplySigned320(
 459563                GetAnchorCoordinateNumerator(
 459564                    secondOrigin,
 459565                    secondAxisX,
 459566                    secondAxisY,
 459567                    secondAxisZ,
 459568                    secondBasis,
 459569                    secondLocalPoint,
 459570                    secondLocalDisplacement,
 459571                    secondLocalTranslation,
 459572                    secondExactLocalTerm),
 459573                firstDenominator));
 574
 575    private static Signed320 GetAnchorCoordinateNumerator(
 576        Fixed64 origin,
 577        Signed192 axisX,
 578        Signed192 axisY,
 579        Signed192 axisZ,
 580        WideRationalBasis3d basis,
 581        Vector3d localPoint,
 582        Vector3d localDisplacement,
 583        Vector3d localTranslation,
 584        FixedPointAnchorTerm3d exactLocalTerm)
 585    {
 1149586        Signed320 roundedNumerator = WideArithmetic.AddSigned320(
 1149587            WideArithmetic.MultiplySigned192(
 1149588                Signed192.Raw(origin),
 1149589                basis.Denominator),
 1149590            WideArithmetic.AddSigned320(
 1149591                WideArithmetic.AddSigned320(
 1149592                    WideArithmetic.GetDotProduct3D(
 1149593                        Signed192.Raw(localPoint.X),
 1149594                        Signed192.Raw(localPoint.Y),
 1149595                        Signed192.Raw(localPoint.Z),
 1149596                        axisX,
 1149597                        axisY,
 1149598                        axisZ),
 1149599                    WideArithmetic.GetDotProduct3D(
 1149600                        Signed192.Raw(localDisplacement.X),
 1149601                        Signed192.Raw(localDisplacement.Y),
 1149602                        Signed192.Raw(localDisplacement.Z),
 1149603                        axisX,
 1149604                        axisY,
 1149605                        axisZ)),
 1149606                WideArithmetic.GetDotProduct3D(
 1149607                    Signed192.Raw(localTranslation.X),
 1149608                    Signed192.Raw(localTranslation.Y),
 1149609                    Signed192.Raw(localTranslation.Z),
 1149610                    axisX,
 1149611                    axisY,
 1149612                    axisZ)));
 1149613        Signed576 scaledRounded = WideArithmetic.MultiplySigned320(
 1149614            roundedNumerator,
 1149615            Signed320.ExtendValue(
 1149616                FixedPointAnchorTerm3d.Denominator));
 1149617        Signed320 residualProjection = WideArithmetic.GetDotProduct3D(
 1149618            Signed192.Signed(exactLocalTerm.X),
 1149619            Signed192.Signed(exactLocalTerm.Y),
 1149620            Signed192.Signed(exactLocalTerm.Z),
 1149621            axisX,
 1149622            axisY,
 1149623            axisZ);
 1149624        return WideArithmetic.AddSigned320(
 1149625            Signed320.NarrowValue(scaledRounded),
 1149626            residualProjection);
 627    }
 628
 629    private static Signed320 GetAnchorDenominator(WideRationalBasis3d basis) =>
 383630        WideArithmetic.MultiplySigned192(
 383631            basis.Denominator,
 383632            FixedPointAnchorTerm3d.Denominator);
 633
 634    private static Signed320 GetAnchorDeltaNumerator(
 635        Fixed64 pointOrigin,
 636        Fixed64 frameOrigin,
 637        Signed192 axisX,
 638        Signed192 axisY,
 639        Signed192 axisZ,
 640        WideRationalBasis3d pointBasis,
 641        Vector3d pointLocalPoint,
 642        Vector3d pointLocalDisplacement,
 643        Vector3d pointLocalTranslation,
 644        FixedPointAnchorTerm3d exactLocalTerm,
 645        Signed320 pointDenominator) =>
 192646        WideArithmetic.SubtractSigned320(
 192647            GetAnchorCoordinateNumerator(
 192648                pointOrigin,
 192649                axisX,
 192650                axisY,
 192651                axisZ,
 192652                pointBasis,
 192653                pointLocalPoint,
 192654                pointLocalDisplacement,
 192655                pointLocalTranslation,
 192656                exactLocalTerm),
 192657            WideArithmetic.MultiplySigned192(
 192658                Signed192.Raw(frameOrigin),
 192659                Signed192.NarrowValue(pointDenominator)));
 660
 661    private static Signed576 GetWideProjection(
 662        Signed320 x,
 663        Signed320 y,
 664        Signed320 z,
 665        Signed192 axisX,
 666        Signed192 axisY,
 667        Signed192 axisZ) =>
 192668        WideArithmetic.AddSigned576(
 192669            WideArithmetic.AddSigned576(
 192670                WideArithmetic.MultiplySigned320(
 192671                    x,
 192672                    Signed320.ExtendValue(axisX)),
 192673                WideArithmetic.MultiplySigned320(
 192674                    y,
 192675                    Signed320.ExtendValue(axisY))),
 192676            WideArithmetic.MultiplySigned320(
 192677                z,
 192678                Signed320.ExtendValue(axisZ)));
 679
 680    private static bool TryGetScaledExactCoordinate(
 681        Signed576 numerator,
 682        Signed576 denominator,
 683        Fixed64 scale,
 684        out Fixed64 coordinate)
 685    {
 72686        if (scale == Fixed64.One)
 687        {
 69688            return Fixed64.TryGetSignedRawRatio(
 69689                numerator,
 69690                denominator,
 69691                out coordinate);
 692        }
 3693        return Fixed64.TryGetSignedRawRatio(
 3694            WideArithmetic.MultiplySigned576ToSigned704(
 3695                numerator,
 3696                Signed320.ExtendValue(Signed192.Raw(scale))),
 3697            WideArithmetic.MultiplySigned576ToSigned704(
 3698                denominator,
 3699                Signed320.ExtendValue(Signed192.One)),
 3700            out coordinate);
 701    }
 702}

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.Geometry.FixedPointAnchor&,FixedMathSharp.Geometry.FixedPointAnchor&,FixedMathSharp.Vector3d,FixedMathSharp.Signed704&,FixedMathSharp.Signed704&)
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&)
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&)