c# - 从 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);
这里有什么想法吗?
谢谢
解决方案
您可以使用 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
推荐阅读
- mysql - node.js Mysql连接错误
- wordpress - React Native App with WordPress REST API - 不允许以该用户的身份创建帖子
- c# - 在文本框中输入值时如何显示两位小数?
- java - 没有可用于离线模式的 com.android.tools.build:aapt2:3.2.0-alpha18-4804415 缓存版本
- python - Django Rest Framework ViewSet 不按字段过滤
- java - 如何在 Theamleaf 中编写 String.Contains
- php - 如何在 PHP 中访问字符串中的值
- asp.net - vb.net DataGridview 比较
- apache-camel - 如何从 apache camel 客户端强制执行 TLSv1.2
- powershell - 根据列值将 CSV 文件拆分为多个文件