gpt4 book ai didi

c# - Vector3.magnitude 和 vector3.normalized 解释

转载 作者:行者123 更新时间:2023-11-30 14:22:20 25 4
gpt4 key购买 nike

我正在查看这段代码,但不知道这个magnitudenormalized 是做什么的,也不知道这个人是如何使用它们的。在文档中只有很少的东西,但并没有解释太多。

我正在查看的代码是:

public float minDistance = 1.0f;
public float maxDistance = 4.0f;
public float smooth = 10.0f;
Vector3 dollyDir;
public Vector3 dollyDirAdjusted;
public float distance;

void Awake()
{
dollyDir = transform.localPosition.normalized;
//What has he got with this? Documentation says Returns this vector with
//a magnitude of 1 so if i get it it return's it's length as 1. So what is the point?

distance = transform.localPosition.magnitude;
//Have no idea what he got with this
}
void Update()
{
Vector3 desiredPos = transform.parent.TransformPoint(dollyDir * maxDistance);
//I know what TransfromPoint does but what is he getting with this dollyDir * maxDistance

//Some other code which i understand
}

当我在这里的时候,如果有人能给我解释一下 Mathf.Clamp

clamp 的文档非常不清楚,我是如何得到它的是我给顶部和底部值 1 和 5 并且如果我设置 value = 3 它将返回 3,但如果我将值设置为 > 5,它将返回 5,如果我将值设置为 < 1,它将返回 1?

谢谢。

最佳答案

Vector3.magnitude 返回一个 float ,它是一个表示向量长度的单维值(因此它丢失了方向信息)

Vector3.normalized 是一种相反的操作 - 它返回矢量方向,保证所得矢量的大小为一(它保留方向信息但丢失大小信息)。

当你想将这两种查看向量的方式分开时,这两者通常很有用,例如,如果你需要在两个物体之间产生影响,而影响与它们之间的距离成反比,你可以这样做

float mag=(targetpos-mypos).magnitude;
if (mag<maxRange)
{
Vector3 dir=(targetpos-mypos).normalized;
Vector3 newVector=dir*(maxRange-mag);
}

这对我来说是最典型的用例,我不确定原始代码的作者的意思是什么,因为看起来他可以只使用向量差异而不使用两个额外的调用

Mathf.Clamp 返回介于最小值和最大值之间的值,如果小于则返回最小值,如果大于则返回最大值。

Vector3 的另一个有趣的特性是 sqrMagnitude,它返回 a^2+b^2+c^c 而无需计算平方根。虽然它增加了代码的复杂性(您需要将其与平方距离进行比较),但它节省了相对昂贵的根计算;稍微优化但有点难以阅读的版本看起来像这样

Vectior3 delta=targetpos-mypos;
if (delta.sqrMagnitude<maxRange*maxRange)
{
Vector3 dir=delta.normalized;
Vector3 newVector=dir*(maxRange-delta.magnitude);
}

关于c# - Vector3.magnitude 和 vector3.normalized 解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50212009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com