C# C规范化(像向量一样)

C# C规范化(像向量一样),c#,vector,normalize,C#,Vector,Normalize,我的移动对象中的代码: ObjectX.Location.Add(Velocity * Utils.GetMoveDir(start, destination)); 效用函数: public static PointF GetMoveDir(PointF start, PointF destination) { PointF substraction = destination.SubStract(start); if (substraction

我的移动对象中的代码:

ObjectX.Location.Add(Velocity * Utils.GetMoveDir(start, destination));
效用函数:

    public static PointF GetMoveDir(PointF start, PointF destination)
    {
        PointF substraction = destination.SubStract(start);
        if (substraction == PointF.Empty) // If-statement is needed because normalizing a zero value results in a NaN value
            return PointF.Empty;
        else
            return substraction.Normalize(); // <<<< I need something for this
    }
注意,我没有使用XNA框架

public static PointF Normalize(this PointF A)
{
    float distance = Math.Sqrt(A.X * A.X + A.Y * A.Y);
    return new PointF(A.X / distance, A.Y / distance);
}

另请参阅第一段,了解什么是标准化向量单位向量以及如何计算它。

PointF实际上是System.Drawing.PointF还是其他什么?上面提到的PointF没有减静态的方法,但是它有减静态的方法。对不起,我忘了提到,这是我在PointF上的一个扩展方法。但它是一个真正的PointF,在System.Drawing.Works中就像一个符咒一样。顺便说一句,这两个答案都有效。请注意,您必须添加一个float cast以使其编译:floatMath.Sqrt。。;
public static PointF Normalize(this PointF A)
{
    float length = Math.Sqrt( A.X*A.X + A.Y*A.Y);
    return new PointF( A.X/length, A.Y/length);
} 
public static PointF Normalize(this PointF A)
{
    float length = Math.Sqrt( A.X*A.X + A.Y*A.Y);
    return new PointF( A.X/length, A.Y/length);
}