Scala编程:规范化长度为0的3D向量
这是我第一次访问,所以请不要恨我,如果这篇文章很差劲的话。是的,我已经问过谷歌了,也在这里四处看看 所以:我需要规范化3D向量。获取一个函数,该函数获取向量并返回一个新的规范化向量。到目前为止没有问题-当它们的长度为0时,我得到(NaN,NaN,NaN)。 向量规格化通常对长度为0的向量做什么?检查长度为0并返回(0.0、0.0、0.0)是否可以Scala编程:规范化长度为0的3D向量,scala,vector,normalization,Scala,Vector,Normalization,这是我第一次访问,所以请不要恨我,如果这篇文章很差劲的话。是的,我已经问过谷歌了,也在这里四处看看 所以:我需要规范化3D向量。获取一个函数,该函数获取向量并返回一个新的规范化向量。到目前为止没有问题-当它们的长度为0时,我得到(NaN,NaN,NaN)。 向量规格化通常对长度为0的向量做什么?检查长度为0并返回(0.0、0.0、0.0)是否可以 Thx向量规范化是一个局部函数,它只是没有在空向量上定义。如何对这种不确定性建模是一个设计决策,Scala中有很多选项。最明显的是,只需使用Doubl
Thx向量规范化是一个局部函数,它只是没有在空向量上定义。如何对这种不确定性建模是一个设计决策,Scala中有很多选项。最明显的是,只需使用
Double
进行计算,然后使用NaN
s作为结果,这样(NaN,NaN,NaN)
就表示不确定性。另一种方法是使用适当的部分函数:
val normalize: PartialFunction[Point, Point] = {
case p if p.magnitude > 0 => ...
}
现在,如果尝试规范化空向量,您将得到一个MatchError
异常
您还可以使用一个普通的方法(或函数),如果将空向量作为输入,该方法(或函数)将引发异常。这使您可以更好地控制异常消息等,但也意味着您失去了Scala中PartialFunction
提供的一些额外便利
您还可以使用返回选项[点]
的方法:
def normalize(p: Point): Option[Point] = if (p.magnitude == 0.0) None else Some(
...
)
还有一点是,有很多方法可以对不确定性进行建模,为您的程序选择最好的方法将是平衡性能、正确性和用例的便利性等
最后,正如您所说,您可以为
normalize
编写一个特例,将空向量映射到自身,但请注意,这将打破输出始终是单位向量的不变性。再说一次,也许这很好,但这是值得注意的。Nanana。。。看不出来我实际上并不认为这是一个重复,或者至少scala
标签暗示了一种解释,在这种解释下它不是。Sry的双重职位,谢谢你的帮助!