hem*_*ant 0 math cocos2d-iphone ios
我有一个数组的最后两个CGPoints,其中包含用户绘制的线条.我需要以相同的角度将线延伸到固定的距离.所以我首先在下面的代码的帮助下计算最后两点之间的角度
-(CGFloat)angleBetweenFirstPoint:(CGPoint)firstPoint ToSecondPoint:(CGPoint)secondPoint
{
CGPoint diff = ccpSub(secondPoint, firstPoint);
NSLog(@"difference point %f , %f",diff.x,diff.y);
CGFloat res = atan2(diff.y, diff.x);
/*if ( res < 0 )
{
res = (0.5 * M_PI) + res;
}
if ( dx<0 && dy>0 ) { // 2nd quadrant
res += 0.5 * M_PI;
} else if ( dx<0 && dy<0 ) { // 3rd quadrant
res += M_PI;
} else if ( dx>0 && dy<0 ) { // 4th quadrant
res += M_PI + (0.5 * M_PI);
}*/
//res=res*180/M_PI;
res = CC_RADIANS_TO_DEGREES(res);
return res;
}
Run Code Online (Sandbox Code Playgroud)
计算角度后,我借助以下数学找到延伸点
-(void)extendLine
{
lineAngle = [self angleBetweenFirstPoint:pointD ToSecondPoint:endPt];
extendEndPt.x = endPt.x - cos(lineAngle) * 200;
extendEndPt.y = endPt.y - sin(lineAngle) * 200;
// draw line unto extended point
}
Run Code Online (Sandbox Code Playgroud)
但是我得到的点不是以与原始线相同的角度绘制延长线.我认为这是因为我没有在最后几点之间找到正确的角度..我可能做错了什么?在考虑角度和方式时,我是否需要考虑整个象限系统?并且我在横向模式下工作.那会有什么不同吗?
小智 7
天啊,你这样做的方式令人难以置信的过于复杂.
用角度跳过所有的crapola.你不需要它.期.用矢量和非常简单的方法做到这一切.首先,我假设你有两个点,P1和P2.您希望找到一个新的点P3,即P2的已知距离(d),沿着连接两点的直线.
你需要做的就是首先,计算一个指向所讨论的线的向量.
V = P2 - P1;
Run Code Online (Sandbox Code Playgroud)
我写的就好像我在MATLAB中写的那样,但所有这些都意味着要减去两点的x和y坐标.
接下来,将矢量V缩放以具有单位长度.
V = V/sqrt(V(1)^2 + V(2)^2);
Run Code Online (Sandbox Code Playgroud)
将向量V的分量除以该向量的长度(或者如果您愿意,则为2范数)可以创建具有单位范数的向量.该范数只是V元素的平方和的平方根,因此它显然是向量的长度.
现在计算P3很简单.
P3 = P2 + d*V;
Run Code Online (Sandbox Code Playgroud)
P3将在远离点P1的线的方向上位于距离P2的d个单位的距离处.没有什么复杂的要求.没有角度计算.不用担心象限.
学习使用矢量.他们是你的朋友,或者至少,如果你让他们,他们就可以.
归档时间: |
|
查看次数: |
2619 次 |
最近记录: |