我正在尝试研究如何创建一个新的矢量位置或目标矢量位置来表示给定当前角度的圆(或饼图)的提取部分。具体来说,我需要通过为我的动画每帧增加 x 和 y 来计算从当前向量到达目标向量所需的总浮点值 - (这部分已经完成了一些背景信息)。我已经在我的程序中确定了以下信息......这是一个示例:
- 矢量开始:x 1.000000 y 0.000000 z 0.200000
- 矢量结束:0.406737 y 0.913545 z 0.200000
- 交叉产品。x 0.182709,y 0.118653,z -0.913545
- 以度为单位的起始角度:0.000000
- 结束角度(度):66.000000
- 矢量起点和终点之间的角度(以度为单位):33
我试过使用下面的方法来增加/减少位置
float distanceX = (crossProduct.x > 0) ? crossProduct.x + 0.5 : crossProduct.x - 0.5;
float distanceY = (crossProduct.y > 0) ? crossProduct.y + 0.5 : crossProduct.y - 0.5;
然后申请:
translationX = cosf(distanceX) * 1;
translationY = sinf(distanceY) * 1;
translationX /= 10;
translationY /= 10;
得到: 翻译X:0.077587 翻译Y:0.057994
最后将新坐标传递到:
glTranslatef(translationX, translationY, 0.0);
这段代码在某种程度上可以工作,但是当我将它应用到圆圈的不同部分时遇到了麻烦,即某些部门在共享象限中的象限。
感谢所有的回复。这是 @Mark Oblak建议的实现代码。
GLKVector4 normalizedVectorStart = GLKVector4Normalize(vStart);
GLKVector4 normalizedVectorEnd = GLKVector4Normalize(vEnd);
GLKVector4 vectorOffset = GLKVector4Add(normalizedVectorStart, normalizedVectorEnd);
GLKVector4 normalizedVectorOffset = GLKVector4Normalize(vectorOffset);
NSLog(@"normalizedVectorOffset x %f y %f z%f", normalizedVectorOffset.x, normalizedVectorOffset.y, normalizedVectorOffset.z);
normalizedVectorOffset x 0.532707 y 0.345944 z0.151473
float sign = GLKVector4DotProduct(normalizedVectorOffset, vStart);
float distanceFromCenter = 0.2;
sign = (sign > 0.0) ? 1.0 : -1.0;
GLKVector4 normalizedVectorOffsetWithSign = GLKVector4MultiplyScalar(normalizedVectorOffset, sign * distanceFromCenter);
NSLog(@"normalizedVectorOffset (sign) x %f y %f z%f", normalizedVectorOffsetWithSign.x, normalizedVectorOffsetWithSign.y, normalizedVectorOffsetWithSign.z);
normalizedVectorOffset (符号) x 0.106541 y 0.069189 z0.030295