我有3个CGPoints A,B和C.我想找到AB和BC之间的角度。我正在尝试开发一个滑动键盘,每当我的滑动路径改变角度时我想得到分数
答案 0 :(得分:1)
我们需要代表AB和BC的向量。然后我们可以使用标准公式计算角度,该公式将该角度的cos与点积相关联除以幅度的乘积...
float angleBetween(CGPoint v, CGPoint a, CGPoint b) {
CGVector vA = vectorFromTo(v, a);
CGVector vB = vectorFromTo(v, b);
return acosf(dot(vA, vB) / (magnitude(vA) * magnitude(vB)));
}
以下是如何从一对点制作矢量...
CGVector vectorFromTo(CGPoint from, CGPoint to) {
return CGVectorMake(to.x-from.x, to.y-from.y);
}
这是如何点缀产品两个向量...
float dot(CGVector a, CGVector b) {
return a.dx*b.dx + a.dy*b.dy;
}
以下是如何计算幅度......
float magnitude(CGVector v) {
return sqrtf(v.dx*v.dx + v.dy*v.dy);
}