Esempio n. 1
0
    private float ClosestGuessToPoint(Vector3 point, int intervals,
                                      out HermiteNode hermiteA, out HermiteNode hermiteB)
    {
        var   bestSqrDist  = Mathf.Infinity;
        float bestFraction = 0f;

        hermiteA = _hermiteNodes[0];
        hermiteB = _hermiteNodes[_hermiteNodes.Length - 1];

        var stepSize = 1f / intervals;

        for (int j = 0; j < _hermiteNodes.Length - 1; j++)
        {
            if (j == _hermiteNodes.Length - 2)
            {
                // last point of last segment should reach p1
                stepSize = 1f / (intervals - 1f);
            }
            for (int i = 0; i < intervals; i++)
            {
                var hA          = HermitePointN(j);
                var hB          = HermitePointN(j + 1);
                var fraction    = stepSize * i;
                var currPoint   = PointAtFraction(hA, hB, fraction);
                var currSqrDist = (currPoint - point).sqrMagnitude;
                if (currSqrDist < bestSqrDist)
                {
                    bestSqrDist  = currSqrDist;
                    hermiteA     = hA;
                    hermiteB     = hB;
                    bestFraction = fraction;
                }
            }
        }

        return(bestFraction);
    }
Esempio n. 2
0
 private Vector3 TangentAtFraction(HermiteNode hermiteNodeA, HermiteNode hermiteNodeB, float fraction)
 {
     return(TangentAtFraction(hermiteNodeA.Point, hermiteNodeA.ControlPoint,
                              hermiteNodeB.Point, hermiteNodeB.ControlPoint,
                              fraction));
 }
Esempio n. 3
0
 private Vector3 TangentAtFraction(HermiteNode hermiteNodeA, HermiteNode hermiteNodeB, float fraction)
 {
     return TangentAtFraction(hermiteNodeA.Point, hermiteNodeA.ControlPoint,
                            hermiteNodeB.Point, hermiteNodeB.ControlPoint,
                            fraction);
 }
Esempio n. 4
0
    private float ClosestGuessToPoint(Vector3 point, int intervals,
                                       out HermiteNode hermiteA, out HermiteNode hermiteB)
    {
        var bestSqrDist = Mathf.Infinity;
        float bestFraction = 0f;
        hermiteA = _hermiteNodes[0];
        hermiteB = _hermiteNodes[_hermiteNodes.Length - 1];

        var stepSize = 1f/intervals;
        for (int j = 0; j < _hermiteNodes.Length - 1; j++) {
            if (j == _hermiteNodes.Length - 2) {
                // last point of last segment should reach p1
                stepSize = 1f/(intervals - 1f);
            }
            for (int i = 0; i < intervals; i++) {
                var hA = HermitePointN(j);
                var hB = HermitePointN(j+1);
                var fraction = stepSize * i;
                var currPoint = PointAtFraction(hA, hB, fraction);
                var currSqrDist = (currPoint - point).sqrMagnitude;
                if (currSqrDist < bestSqrDist) {
                    bestSqrDist = currSqrDist;
                    hermiteA = hA;
                    hermiteB = hB;
                    bestFraction = fraction;
                }
            }
        }

        return bestFraction;
    }