首页 > 解决方案 > 从 2 点之间的方向获取值 -1 到 1

问题描述

我正在寻找控制人工智能汽车并将其开向玩家汽车。我已经计算出通往玩家汽车的路径,但我无法获得人工智能汽车应该用来沿着路径行驶的转向角。

这些汽车通过 -1 比 1 的转向比进行控制。

这是我尝试过的,但汽车只是绕圈子。

void UpdatePath()
{
    NavMesh.CalculatePath(transform.position, _Target.position, 1 << 0, path);
    DrawPath();

    Vector3 relativePos = path.corners[0] - transform.position;
    Quaternion targetRotation = Quaternion.LookRotation(relativePos);

    float y = transform.eulerAngles.y;
    float DeltaAngle = Mathf.DeltaAngle(y, targetRotation.y);


   float delta = Mathf.Clamp(DeltaAngle, -1, 1);

这里有什么想法吗?

谢谢

标签: c#unity3dphysics

解决方案


您可以使用 Min-Max 归一化。

public float MinMaxNormalization(float point, float MaxPoint, float MinPoint){
        float value = (point - MinPoint) / (MaxPoint - MinPoint); // the value is between 0 and 1
        value *= 2; // now the value is between 0 and 2
        value -= 1; // now the value is between -1 and 1
        return value;
    }

我假设 MaxPoint = 90.0f 和 MinPoint = -90.0f ,所以

float MaxPoint = 90.0f;
float MinPoint = -90.0f;
float delta;
delta = MinMaxNormalization(90, MaxPoint , MinPoint); //delta will be 1
delta = MinMaxNormalization(0, MaxPoint , MinPoint); // delta will bi 0
delta = MinMaxNormalization(-90, MaxPoint , MinPoint); // delta will be -1
delta = MinMaxNormalization(45, MaxPoint , MinPoint); // delta will be 0.5
delta = MinMaxNormalization(-45, MaxPoint , MinPoint); // delta will be -0.5

推荐阅读