
人工智能和行为
|
283
要算出猎物是否处于捕猎者的视界之内,还需要进行更多的计算。我们首先需要算
出这两个方向之间的夹角:捕猎者面对的方向和捕猎者直接面对猎物之后的方向。
这需要我们创建两个向量。第一个向量用于表示捕猎者当前面对的方向:
let facingDirection = CGPoint(x:0, y:1).rotatedBy(radians:self.zRotation)
第二个向量表示从捕猎者到猎物的方向,通过将猎物的位置减去捕猎者的位置,在
进行单位化即可算出:
let vectorToTarget = (target.position - self.position).normalized
有了这两个向量之后,就可以算出两者间的夹角。将两个向量进行点乘,再求出反
余弦值:
let angleToTarget = acos(facingDirection.dot(other: vectorToTarget))
知道了捕猎者和猎物之间的夹角后,如果这个角度小于捕猎者视角的一半,则表明
捕猎者能够看见猎物;否则猎物处于捕猎者视角之外,不可见。
9.13
用
NSLinguisticTagger
作词性标注
问题
你想识别出一句话中重要的构词要素。
解决方案
用
NSLinguisticTagger
类可以识别语句中的构成:
//
定义要分析的句子
let input = "You'll need to destroy the Ring, Mr Frodo"
//
指定词法分析选项
let options: ...