Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala编程:规范化长度为0的3D向量_Scala_Vector_Normalization - Fatal编程技术网

Scala编程:规范化长度为0的3D向量

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

这是我第一次访问,所以请不要恨我,如果这篇文章很差劲的话。是的,我已经问过谷歌了,也在这里四处看看

所以:我需要规范化3D向量。获取一个函数,该函数获取向量并返回一个新的规范化向量。到目前为止没有问题-当它们的长度为0时,我得到(NaN,NaN,NaN)。 向量规格化通常对长度为0的向量做什么?检查长度为0并返回(0.0、0.0、0.0)是否可以


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的双重职位,谢谢你的帮助!