unity3d вычисляет уровень интерполяции, используя два вектора и точку где-то посередине - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть три переменных vector3; начало, конец и некоторая промежуточная точка. Я знаю, что в обычной линейной интерполяции вы задаете начальную и конечную точки вместе с переменной 't', такой как «0,6», которая возвращает положение в этой точке на пути.

То, что я хочу сделать, это передать начальную и конечную точку вместе с позицией и получить обратно значение 't', поэтому, например, я могу пройти в позиции чуть более половины пути и получить обратно '0,6'.

Я знаю, что это немного странно, и я, вероятно, плохо справился с объяснением, но любая помощь будет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Если вы можете сделать допущение, что третья точка находится на линии между первыми двумя:

float MagA = (Position2 - Position1).Magnitude;
float MagB = (LerpedVector - Position1).Magnitude;
float fraction =  MagB/MagA;
0 голосов
/ 11 сентября 2018
public float ReverseLerp(Vector3 start, Vector3 end, Vector3 point)
    {
        float tx = (1f - 0f) / (end.x - start.x) * (point.x - end.x) + 1f;
        float ty = (1f - 0f) / (end.y - start.y) * (point.y - end.y) + 1f;
        float tz = (1f - 0f) / (end.z - start.z) * (point.z - end.z) + 1f;
        float totalClamp = tx + ty + tz;

        float weight = (1f - 0f) / (3f - 0f) * (totalClamp - 3f) + 1f;
        weight = ((weight - 0f) / (1f - 0f)) * (1f - 0f) + 0f;
        weight = Round(weight, 2);
        return weight;
    }
...