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); }
private Vector3 TangentAtFraction(HermiteNode hermiteNodeA, HermiteNode hermiteNodeB, float fraction) { return(TangentAtFraction(hermiteNodeA.Point, hermiteNodeA.ControlPoint, hermiteNodeB.Point, hermiteNodeB.ControlPoint, fraction)); }
private Vector3 TangentAtFraction(HermiteNode hermiteNodeA, HermiteNode hermiteNodeB, float fraction) { return TangentAtFraction(hermiteNodeA.Point, hermiteNodeA.ControlPoint, hermiteNodeB.Point, hermiteNodeB.ControlPoint, fraction); }
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; }