C# 求两个点的距离

①Vector3有提供函数Distance,传入两个点的坐标即可得到距离。

public float Distance(Vector3 pos1, Vector3 pos2){
    return Vector3.Distance(pos1, pos2);
}

Vector3.Distance源码:

public static float Distance(Vector3 a, Vector3 b){
    float num1 = a.x - b.x;
    float num2 = a.y - b.y;
    float num3 = a.z - b.z;
    return (float) Math.Sqrt((double) num1 * (double) num1 + (double) num2 * (double) num2 + (double) num3 * (double) num3);
}

②Vector3有提供函数Magnitude,传入向量(两个点相减可以得到向量)即可得到距离。

public float Distance(Vector3 pos1, Vector3 pos2){
    return Vector3.Magnitude(pos1 - pos2);
}

Vector3.Magnitude源码:

public static float Magnitude(Vector3 vector) => (float) Math.Sqrt(
(double) vector.x * (double) vector.x + (double) vector.y * (double) vector.y
 + (double) vector.z * (double) vector.z);

我遇到的问题就是需要根据物体离摄像机距离排序,我一开始用的Vector3.Distance,然后我的导师就和我说这个可以优化,因为我并不是要知道真正的距离,只是需要比较大小,而上面两个函数都进行了一次开方,对于我的问题是多余的运算。

Vector3提供了一个SqrMagnitude,源码:

public static float SqrMagnitude(Vector3 vector) => (float) 
((double) vector.x * (double) vector.x + (double) vector.y * (double) vector.y + 
(double) vector.z * (double) vector.z);

这个就是Vector3.Magnitude少了开方的操作,省掉一步,优化成功咯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值